一尘不染

“ var = $ {var:-word}”和“ var = $ {var:= word}”之间有什么区别?

linux

我在此阅读了bash手册页,但我不了解其中的区别。我对它们进行了测试,它们似乎产生了完全相同的结果。

如果未通过命令行参数设置值,我想设置变量的默认值。

#!/bin/bash

var="$1"
var=${var:-word}
echo "$var"

上面的代码回显wordif $1为null并回显$1if不为null的值。这样:

#!/bin/bash

var="$1"
var=${var:=word}
echo "$var"

根据Bash手册页,

${parameter:-word}使用默认值。如果参数未设置或为null,则替换单词的扩展名。否则,将替换参数的值。

${parameter:=word}分配默认值。如果参数未设置或为空,则将单词扩展指定给参数。然后替换参数的值。不能以此方式分配位置参数和特殊参数。

它们是相同的,${parameter:=word}只是更多?


阅读 583

收藏
2020-06-07

共1个答案

一尘不染

使用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
2020-06-07