2009-06-30 71 views
6

有人知道什么是:= for?bash脚本是什么:= for?

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

我知道下面的东西就像检查变量HOME是否是一个目录,然后某些东西不等于空字符串。

if [ "${HOME:=}" != "" ] && [ -d ${HOME} ] 

回答

14

Bash Reference Manual来自:

${parameter:=word}

如果参数是设置或者为空,字的扩展被指派给 参数。然后用参数值 代替。位置 参数和特殊参数可能不会以这种方式分配给 。

基本上就会当且仅当是parameter设置或者为空的word值分配给parameter

+0

一秒:) – 2009-06-30 15:21:41

+0

由两位打我我;) – bedwyr 2009-06-30 15:22:17

1

从Bash的手册页:

默认值分配。如果 参数未设置或为空,则将单词 扩展分配给 参数。然后代入参数 的值。位置 参数和特殊参数可能不会以这种方式分配给 。

手册页是一件奇妙的事情。 man bash会告诉你几乎你想知道的关于Bash的一切。

0

这里"${HOME:=}"或多或少是一个空操作符,因为如果它被设置,它将返回$ HOME,如果没有,则返回任何值。

if [ "${HOME:=}" != "" ] && [ -d ${HOME} ] 

这相同的功能:

if [ "${HOME}" != "" ] && [ -d ${HOME} ] 

如果你有等号后面的东西,在if的第一部分将永远是正确的。

if [ "${HOME:=here}" != "" ] && [ -d ${HOME} ] 

无论发生什么事,你总会得到一个不等于“”的字符串。

不过,这将取决于$ HOME和$ DEFAULT是否都是空:

if [ "${HOME:=$DEFAULT}" != "" ] && [ -d ${HOME} ]