2

任何人都可以解释这种格式吗?

${name:-$devi}

例子:

      "${1+"$@"}" will check for that first variable to be set , if not it will use that 

        command line argument. 

这些变量之间有:-什么区别?+

4

1 回答 1

1
${var:-val}

${var}ifvar设置且非 null 相同,否则扩展为val. 这用于指定变量的默认值。

${var+val}

如果var未设置,则扩展为空,否则扩展为val. 这用于为变量提供替代值。

"${1+"$@"}"

是旧 shell 版本中错误的解决方法。如果你只是写了"$@",它会扩展到""没有提供参数时,而不是扩展到什么都没有;然后,该脚本将就好像提供了一个单独的空参数一样。这个语法首先检查是否$1设置了——如果没有第一个参数,那么显然根本没有参数。如果$1未设置,则扩展为空,否则可以安全使用"$@".

大多数现代 shell 版本没有这个错误,所以你可以直接编写"$@"而无需特殊检查。我不确定+shell变量扩展中的构造是否还有其他常见用例。

于 2013-11-08T06:37:21.070 回答