这是代码
a=''
b=john
c=${a-$b}
echo $c
并且输出是空行
对于第一个变量未初始化的类似代码
b1=doe
c1=${a1-$b1}
echo $c1
输出是
doe
我不明白 bash 如何处理导致不同结果的变量扩展。
这是代码
a=''
b=john
c=${a-$b}
echo $c
并且输出是空行
对于第一个变量未初始化的类似代码
b1=doe
c1=${a1-$b1}
echo $c1
输出是
doe
我不明白 bash 如何处理导致不同结果的变量扩展。
该表示法有两种变体${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 Expansionbash
部分在线找到该版本的手册。Bash 还有一些非标准符号,其中许多非常有用,但不一定与其他 shell 共享。