在 bash shell 中,我尝试了以下 2 个产生不同效果的命令:
$ a=`echo UPDATED` echo ${a:-DEFAULT}
DEFAULT
$ a=`echo UPDATED`; echo ${a:-DEFAULT}
UPDATED
Run Code Online (Sandbox Code Playgroud)
无法在一个命令中获得结果(第一种情况)?如果不是,为什么?
引用该男子的一些话:
一个简单的命令是一系列可选的变量赋值,后跟空格分隔的单词和重定向,并由控制运算符终止。
拆分成单词后在命令行上进行扩展。
为清楚起见,实际情况涉及提供由事件处理程序执行的二进制文件。二进制路径来自配置文件,如果配置文件中未定义,则回退到默认值。
更接近真实情况的是这个片段,它被事件处理程序调用:
a=`getConfigVariable "myExec"` ${a:-/opt/bin/default}
Run Code Online (Sandbox Code Playgroud)
其中 getConfigVariable "myExec" 返回配置变量 "myExec",如果未定义,则返回空字符串。例如:
$ getConfigVariable "myExec"
/opt/bin/updated
Run Code Online (Sandbox Code Playgroud) bash ×1