这是代码
a=''
b=john
c=${a-$b}
echo $c
输出为空行
对于第一个变量未初始化的类似代码
b1=doe
c1=${a1-$b1}
echo $c1
输出是
doe
我不明白 bash 如何处理导致不同结果的变量扩展。
最佳答案
${var-value}
有两种变体符号,一种不带冒号,如图所示,一种带冒号:${var:-value}
.
第一个版本没有冒号,意思是“如果$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 Parameter Expansion 部分. Bash 也有许多非标准符号,其中许多非常有用但不一定与其他 shell 共享。
关于bash - 花括号中的变量扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14152534/