为什么
${username=`whoami`}抛出一个错误,而
: ${username=`whoami`}执行一个没有任何不良影响的任务?
我知道:是一个占位符。它在这个命令中有什么用?它是否等同于运行: 'whoami'?
作为参考,以前的用法被称为#3,而新的用法称为#4。
发布于 2014-10-29 17:15:59
${parameter=value}做两件事:如果尚未设置value,则将parameter赋值给parameter;完成时将扩展为parameter值的直接影响。
该错误是直接影响的结果:当您运行
${user=`whoami`}...on自己的行,然后扩展到并尝试以命令的形式运行whoami的输出。假设用户变量以前没有分配给,并且whoami的输出是james;然后它将尝试运行命令james,这将引发一个错误。
相反,跑
: ${user=`whoami`}...first执行副作用(如果user尚未设置,则向user分配),然后运行:
: james...which没有效果,所以只执行(赋值的)副作用。
发布于 2014-10-29 16:54:16
在#3中,根据bash手册页,您正在尝试执行whoami命令输出,即如果whoami命令输出为"peter",则#3表示调用了"peter“命令。此外,"username“变量被赋值为"peter”。
bash手册将${parameter:=word}描述如下:
指定默认值。如果参数未设置或为null,则将word的展开分配给参数。然后替换参数的值。位置参数和特殊参数不能以这种方式分配。
同样,对于:命令--
没有效果;该命令除了展开参数和执行任何指定的重定向之外,什么也不做。返回零退出代码。
https://stackoverflow.com/questions/26636051
复制相似问题