一个例子:
foo() {
for i in ${@+"$@"}; do
echo $i
done
}
我了解如果${parameter+word}
设置为word
,parameter
会导致扩展for i in "$@"; do
。但为什么不使用{{1}}?我确信有一些好处,但有人可以举个例子吗?
谢谢!
答案 0 :(得分:5)
根据POSIX标准,如果未设置"$@"
,$@
应扩展为空。但是,原始Bourne shell将其扩展为单个空字符串。如果未在任何一个shell中设置${@+"$@"}
,$@
将展开为空。
答案 1 :(得分:-1)
当$@
为空字符串""
时,${@+"$@"}
不产生任何内容,"$@"
生成""
,请检查它:
foo() {
for i in ${@:+"$@"}; do
echo XXX: $i
done
}
bar() {
for i in "$@"; do
echo XXX: $i
done
}
echo foo:
foo ""
echo bar:
bar ""
foo
不会调用echo,但bar
会调用它