为什么
${username=`whoami`}
抛出错误,而
: ${username=`whoami`}
执行一项没有任何不良影响的作业?
我理解:
是一个占位符。它在这个命令中有什么用?它是否相当于运行: 'whoami'
?
作为参考,以前的用法以前称为#3,新的用法称为#4。
答案 0 :(得分:6)
${parameter=value}
执行以下两项操作:如果尚未设置value
,则会产生将parameter
分配给parameter
的副作用,以及扩展到parameter
值的直接影响完成后。
错误是直接影响的结果:当你运行
时${user=`whoami`}
...在它自己的行上,然后扩展到并尝试运行whoami
的输出作为命令。我们先说先前未分配用户变量,whoami
的输出为james
;然后它会尝试运行命令james
,这会引发错误。
相比之下,正在运行
: ${user=`whoami`}
...首先执行副作用(如果尚未设置user
,则对user
进行分配),然后运行:
: james
...没有效果,因此只执行(分配的)副作用。
答案 1 :(得分:3)
在#3中,根据bash手册页,您正在尝试执行whoami命令输出,即,如果whoami命令输出是“peter”,则#3表示调用“peter”命令。此外,“username”变量被赋值为“peter”
bash手册描述了${parameter:=word}
如下:
指定默认值。如果参数未设置或为null,则将字的扩展分配给参数。然后替换参数的值。不能以这种方式分配位置参数和特殊参数。
同样,对于:
命令 -
没有效果;除扩展参数和执行任何指定的重定向之外,该命令不执行任何操作。返回零退出代码。