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