我在这上面阅读了bash手册页,但我不明白其中的区别.我测试了它们两个,它们似乎产生完全相同的结果.
如果未通过命令行参数设置值,我想设置变量的默认值.
#!/bin/bash
var="$1"
var=${var:-word}
echo "$var"
Run Code Online (Sandbox Code Playgroud)
上面的代码回显,word如果$1为null,$1则回显if not null的值.这样做:
#!/bin/bash
var="$1"
var=${var:=word}
echo "$var"
Run Code Online (Sandbox Code Playgroud)
根据Bash手册页,
${parameter:-word}使用默认值.如果参数未设置或为null,则替换单词的扩展.否则,参数的值将被替换.
${parameter:=word}分配默认值.如果参数未设置或为null,则将字的扩展分配给参数.然后替换参数的值.不能以这种方式分配位置参数和特殊参数.
他们是一样的,${parameter:=word}只是做得更多吗?
Zan*_*Jie 16
${var:=word}
Run Code Online (Sandbox Code Playgroud)
等于
var=${var:-word}
Run Code Online (Sandbox Code Playgroud)
Gui*_*ume 15
当您使用var两次时,您无法看到与示例的区别,但您可以通过两个不同的变量看到它:
foo=${bar:-something}
echo $foo # something
echo $bar # no assignement to bar, bar is still empty
foo=${bar:=something}
echo $foo # something
echo $bar # something too, as there's an assignement to bar
Run Code Online (Sandbox Code Playgroud)
不同之处在于使用和分配.如果没有=,word则使用该值,但不实际分配给var.
对于只读变量,这是最重要的 - 这是您无法分配给它们的地方.
例如,您永远不能分配编号的位置参数.因此,如果您希望函数使用默认值处理可选的第一个参数,则可以使用以下代码:
${1:-default}
Run Code Online (Sandbox Code Playgroud)
您无法在${1:=default}那里使用该版本,因为您无法分配位置参数1.它是只读的.
有时您会看到使用以下命令进行赋值扩展::
# set defaults
: ${foo:=bar} ${baz:=qux}
Run Code Online (Sandbox Code Playgroud)