我正在查看几个使用${ }
之间的:=
的bash脚本。例如,模式如下:
export VAR=${VAR:=value}
这是在做什么? 如果VAR不存在,它会给VAR赋值吗?
来自man页面:
${parameter:=word} Assign Default Values. If parameter is unset or null, the expansion of word is assigned to parameter. The value of param‐ eter is then substituted. Positional parameters and special parameters may not be assigned to in this way.
换句话说,它基本上允许您为变量指定默认值。如果变量未设置/为空,则将其设置为该值,并且该值也将用作扩展。
这是一种为名称分配默认值的方法。
${foo:=bar}
如果设置了,它将扩展为$foo
。否则,它会将值"bar"
分配给名称foo
,并将整个表达式扩展为该值。我从未在实际生活中看到过任何好的示例使用它。我看到过像这样使用:
: ${foo:=bar}
这种方法通过执行任务,但是会丢弃其输出。我不认为这是一个好的例子,因为你同样可以编写如下代码:
foo=${foo:-bar}
我认为这对大多数读者来说更显而易见。
export
不是必需的。更典型的用法是: "${var:=value}"
(是的,小写 - 全大写名称通常保留给环境变量和内置函数)。:
是一个无操作符,因此唯一的副作用是:=
参数扩展的副作用,它不仅有条件地扩展,而且在适当的情况下修改var
本身。 - Charles Duffyset -x
,你会看到一个没有被这样的扩展修改的值,从而在调试时提供更好的信息。 - Charles Duffy