一个例子:
foo() {
for i in ${@+"$@"}; do
echo $i
done
}
我知道这${parameter+word}会导致wordifparameter设置的扩展。但是为什么不直接使用for i in "$@"; do呢?我敢肯定有一些好处,但任何人都可以举个例子吗?
谢谢!
根据 POSIX 标准,如果未设置,"$@"则应扩展为空。$@但是,原始的 Bourne shell 将其扩展为单个空字符串。如果未在任一 shell 中设置,${@+"$@"}则将扩展为空。$@
资料来源: http: //www.in-ulm.de/~mascheck/various/bourne_args/
when$@是一个空字符串"",${@+"$@"}什么都不产生,但是"$@"产生"",检查它:
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不叫回声,而是bar叫它