解释$ {var:-val}和$ {var + val}

时间:2013-11-08 06:19:30

标签: sh

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

${name:-$devi}

示例:

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

        command line argument. 

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

1 个答案:

答案 0 :(得分:1)

${var:-val}
如果${var}已设置且非空,则

var相同,否则会扩展为val。这用于指定变量的默认值。

${var+val}
如果未设置var,则

展开为空,否则展开为val。这用于为变量提供备用值。

"${1+"$@"}"

是旧shell版本中的错误的解决方法。如果你刚写了"$@",那么当没有提供参数时它会扩展到"",而不是扩展为空;然后,脚本将表现为提供了一个单独的空参数。这个语法首先检查是否设置了$1 - 如果没有第一个参数,那么显然根本没有参数。如果$1未设置,则展开为空,否则使用"$@"是安全的。

大多数现代shell版本没有此错误,因此您可以在没有特殊检查的情况下编写"$@"。我不确定shell变量扩展中+构造是否还有其他常见用例。