任何人都可以解释这种格式吗?
${name:-$devi}
示例:
"${1+"$@"}" will check for that first variable to be set , if not it will use that
command line argument.
这些变量之间的:-
和+
之间有什么区别?
答案 0 :(得分:1)
${var:-val}
如果${var}
已设置且非空,则与var
相同,否则会扩展为val
。这用于指定变量的默认值。
${var+val}
如果未设置var
,则展开为空,否则展开为val
。这用于为变量提供备用值。
"${1+"$@"}"
是旧shell版本中的错误的解决方法。如果你刚写了"$@"
,那么当没有提供参数时它会扩展到""
,而不是扩展为空;然后,脚本将表现为提供了一个单独的空参数。这个语法首先检查是否设置了$1
- 如果没有第一个参数,那么显然根本没有参数。如果$1
未设置,则展开为空,否则使用"$@"
是安全的。
大多数现代shell版本没有此错误,因此您可以在没有特殊检查的情况下编写"$@"
。我不确定shell变量扩展中+
构造是否还有其他常见用例。