我在这上面读了bash手册页,但我不明白其中的区别。我测试了他们两个,他们似乎产生完全相同的结果。
如果变量的值不是通过命令行参数设置的,我希望设置该变量的默认值。
#!/bin/bash
var="$1"
var=${var:-word}
echo "$var"上面的代码回显word,如果$1为null,则回显$1的值(如果不是null )。这一点也是如此:
#!/bin/bash
var="$1"
var=${var:=word}
echo "$var"根据Bash手册页面,
${parameter:-word}使用默认值。如果参数为unset或null,则替换word的展开。否则,替换参数的值。${parameter:=word}分配默认值。如果参数未设置或为null,则将word的展开分配给参数。然后替换参数的值。位置参数和特殊参数不能以这种方式分配。
是因为它们是一样的,而${parameter:=word}只是做得更多吗?
发布于 2013-07-01 12:53:18
当您使用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发布于 2013-07-01 12:48:53
${var:=word}等于
var=${var:-word}发布于 2013-07-01 12:50:04
不同之处在于使用和分配。如果没有=,则使用word值,但不实际分配给var。
对于那些只读取的变量来说,这是最重要的--这是你不能分配给它们的地方。
例如,您永远不能为编号的位置参数分配。因此,如果您希望函数在默认情况下处理可选的第一个参数,则可以使用以下代码:
${1:-default}您不能在那里使用${1:=default}版本,因为您不能为位置参数1分配。是只读的。
https://stackoverflow.com/questions/17404696
复制相似问题