Bash Shell - :命令

q09*_*987 3 linux bash shell

冒号命令是空命令.

:构造在变量的条件设置中也很有用.例如,

: ${var:=value}
Run Code Online (Sandbox Code Playgroud)

如果没有:,shell会尝试将$ var作为命令进行评估.<= ???

我不太明白上述陈述中的最后一句话.谁能给我一些细节?

谢谢

Mik*_*kel 5

尝试

var=badcommand
$var
Run Code Online (Sandbox Code Playgroud)

你会得到

bash: badcommand: command not found
Run Code Online (Sandbox Code Playgroud)

尝试

var=
${var:=badcommand}
Run Code Online (Sandbox Code Playgroud)

你会得到同样的.

shell(例如bash)总是尝试在每个命令行上运行第一个单词作为命令,即使在进行变量扩展之后也是如此.

唯一的例外是

var=value
Run Code Online (Sandbox Code Playgroud)

外壳特别对待.

您提供的示例中的技巧是${var:=value}在命令行的任何位置工作,例如

# set newvar to somevalue if it isn't already set
echo ${newvar:=somevalue}
# show that newvar has been set by the above command
echo $newvar
Run Code Online (Sandbox Code Playgroud)

但我们甚至不想回应价值,所以我们想要的东西比
echo ${newvar:=somevalue}.

:命令允许我们在没有任何其他操作的情况下执行分配