6

一个例子:

foo() {
    for i in ${@+"$@"}; do
        echo $i
    done
}

我知道这${parameter+word}会导致wordifparameter设置的扩展。但是为什么不直接使用for i in "$@"; do呢?我敢肯定有一些好处,但任何人都可以举个例子吗?

谢谢!

4

2 回答 2

6

根据 POSIX 标准,如果未设置,"$@"则应扩展为空。$@但是,原始的 Bourne shell 将其扩展为单个空字符串。如果未在任一 shell 中设置,${@+"$@"}则将扩展为空。$@

资料来源: http: //www.in-ulm.de/~mascheck/various/bourne_args/

于 2013-07-05T15:17:38.213 回答
-1

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叫它

于 2013-07-05T14:53:02.543 回答