我有这个代码:
for file in "$@"*png; do
echo "$file"
done
仅当您提供以 / like 结尾的路径时,它才有效/root/
。
在这种情况下,在不破坏我的脚本的情况下,将 / 添加到路径输入的正确方法是什么?
如果你在最后给出一个没有 / 的路径输入,它只是这样做:
File: /root*png
如果我将其修改为for file in "$@"/*png; do
并输入/root/test/
它可以工作,但结果看起来很难看:
File: /root/test//sample2.png
ilkkachu 指出了我的回答中的一个主要缺陷,并在他的回答中纠正了它,所以请给予他应得的信任。不过,我想出了另一个解决方案:
示例:
原始解决方案:
${@%/} 将修剪参数末尾的任何 / ,然后 / 外部将其添加回来 - 或将其添加到任何没有参数的参数中。
像这样使用
$@
glob 似乎有些奇怪。如果您希望它能够处理多个参数,那么它就行不通了。周围的字符串$@
仅附加到第一个和列表项。因此,要处理多个参数,您需要
"$@"
单独循环:在另一种情况下,您可以使用字符串替换扩展
${//}
(在 Bash 或 zsh 中)为每个位置参数添加一个后缀,但是很难让它与 glob 一起使用。您也可以使用 tr 。
始终在末尾添加 / 并...