Bash脚本中的:=是什么意思?

37

有人知道:=是什么吗?

我尝试过谷歌搜索,但似乎谷歌会过滤所有的符号?

我知道下面这段代码大概是检查变量HOME是否为目录,然后判断它不等于空字符串。

  if [ "${HOME:=}" != "" ] && [ -d ${HOME} ]
2个回答

61
Bash参考手册中:

${parameter:=word}

如果parameter未设置或为空,则将word的扩展分配给parameter。然后替换parameter的值。无法以这种方式分配位置参数和特殊参数。

基本上,只有在parameter未设置或为空时,才会将word的值分配给parameter。


我在很多地方看到过 := 的用法。通常我看到的解释是“定义为”。在 C++、C#、Java(以及其他许多地方)中,:= 等同于 =。而当这个条件成立时,通常使用 = 来表示 ==。哇,这是我提出的一个微妙的观点。抱歉我表达得不太好 :) - cwap
1
据我所知,这是 bash 使用 ":=" 的唯一情况。用于赋值的符号是 "=",而用于相等比较的符号可以是 "=" 或 "=="。Bash 还接受 "+=" 等赋值运算符。我不确定你所说的 C++ 等语言使用哪个运算符,但它是 "="。像 Pascal 和 Ada 这样的语言使用 ":=",因此可能被认为更为罕见。 - Dennis Williamson

3

来自 Bash 手册页面:

分配默认值。如果参数未设置或为空,则将单词的扩展分配给参数。然后替换参数的值。无法以此方式分配位置参数和特殊参数。

手册页是一件美妙的事情。man bash几乎可以告诉您有关Bash的所有信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接