这是代码
a=''
b=john
c=${a-$b}
echo $c
Run Code Online (Sandbox Code Playgroud)
并且输出是空行
对于第一个变量未初始化的类似代码
b1=doe
c1=${a1-$b1}
echo $c1
Run Code Online (Sandbox Code Playgroud)
输出是
doe
Run Code Online (Sandbox Code Playgroud)
我不明白bash如何处理扩展导致不同结果的变量.
Jon*_*ler 44
${var-value}符号有两种变体,一种没有冒号,如图所示,另一种带冒号:${var:-value}.
第一个版本,没有冒号,表示'if $var设置为任何值(包括空字符串),使用它; 否则,value改为使用'.
带冒号的第二个版本意味着'if $var被设置为除空字符串之外的任何值,使用它; 否则,value改为使用'.
这种模式也适用于其他变量替换,特别是:
${var:=value}
$var设置为任何非空字符串,保持不变; 否则,设置$var为value.${var=value}
$var设置为任何值(包括空字符串),保持不变; 否则,设置$var为value.${var:?message}
$var设置为任何非空字符串,则不执行任何操作; 否则,使用给定的消息"投诉"(如果message本身为空,则提供默认消息).${var?message}
$var设置为任何值(包括空字符串),则不执行任何操作; 否则,使用给定的消息抱怨'.这些符号都适用于任何POSIX兼容的shell(Bourne,Korn,Bash等).您可以bash在线找到该版本的手册- 在Shell参数扩展部分.Bash还有许多非标准符号,其中许多非常有用,但不一定与其他shell共享.