我看到一些bash脚本(在GNU bash上,版本3.2.51(1)),参数替换如
function foo() {
local x=${1-XYZ} ##### (1)
echo "x=${x}."
}
foo ####### this prints x=XYZ
foo ABCD ###### this prints x=ABCD
我更常见的是(1)x=${1:-XYZ}
,我也可以在Bash参考页面here中找到它。两者都是正确的,还是在后台发生了其他事情,在某些情况下可能会失败?
它不一定是$1
- 只要未定义${XX-sub}
中的变量,它就会选择替代品。
非常感谢
答案 0 :(得分:2)
如果未设置value
,请使用default
,否则请使用value
:
var=${value-$default}
var=${value:-$default} # ':' use default even if value declared and empty/null
例如(缺少命令行参数):
value=
var=${value-$default} # not set
var=${value:-$default} # set to $default
答案 1 :(得分:2)
不同之处在于-
如果参数未设置(即未定义)则使用备用值,:-
使用它未设置或为空(即设置为空字符串)。例如:
$ foo() {
> echo "Argument 1 with :- is '${1:-altval}', with just - is '${1-altval}'"
> echo "Argument 2 with :- is '${2:-altval}', with just - is '${2-altval}'"
> }
$ foo ""
Argument 1 with :- is 'altval', with just - is ''
Argument 2 with :- is 'altval', with just - is 'altval'
这里我将一个(空)参数传递给函数,因此$1
设置为null,但$2
未设置。
答案 2 :(得分:0)
${var-word}
返回"字"如果var
未定义。如果没有,则返回$ {var}。
${var:-word}
返回"字"如果var
为null或未定义。如果没有,则返回$ {var}。
您可以使用此示例脚本轻松检查差异。
#!/bin/bash
var1="" ## var1 is Null
#var2= ## var2 is undefined
var3="value3" ## var3 is set
echo '${var1}': ${var1} "(NULL)"
echo '${var2}': ${var2} "(Undefined)"
echo '${var3}': ${var3}
echo '${var1-foo}': ${var1-foo}
echo '${var2-foo}': ${var2-foo}
echo '${var3-foo}': ${var3-foo}
echo '${var1:-foo}': ${var1:-foo}
echo '${var2:-foo}': ${var2:-foo}
echo '${var3:-foo}': ${var3:-foo}
此脚本输出。
${var1}: (NULL)
${var2}: (Undefined)
${var3}: value3
${var1-foo}:
${var2-foo}: foo
${var3-foo}: value3
${var1:-foo}: foo
${var2:-foo}: foo
${var3:-foo}: value3