为什么在shell脚本中使用$ {@ +"$ @"}?

Kla*_*aus 5 linux posix sh

一个例子:

foo() {
    for i in ${@+"$@"}; do
        echo $i
    done
}
Run Code Online (Sandbox Code Playgroud)

据我所知,if ${parameter+word}的扩展结果已经确定.但为什么不用呢?我确信有一些好处,但任何人都可以举个例子吗?wordparameterfor i in "$@"; do

谢谢!

che*_*ner 5

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

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

  • 澄清一下:这种机制曾经是必要的,但它是一个已成熟时代的遗物. (3认同)