以下计划
#!/bin/bash
x=
y="${x:-''}"
z=${x:-''}
k="${x:-}"
l=${x:-}
echo "x = [$x]"
echo "y = [$y]"
echo "z = [$z]"
echo "k = [$k]"
echo "l = [$l]"
(shellcheck说'没有发现问题')
产量
x = []
y = ['']
z = []
k = []
l = []
${parameter:-word}
表示的参数扩展在 bash 的手册页中描述如下:
$ {parameter:-word}:使用默认值。如果参数未设置或 null,单词的扩展被替换。否则,值 参数被替换。
如何评估"${x:-''}"
导致字符串''
而不是空字符串?
答案 0 :(得分:5)
自y="${x:-''}"
扩展以来,替换字中的字符也被视为双引号。结果类似于y=${x:"''"}
,但在后一种情况下,$x
的内容未引用(另请参阅下面的注释)。
同样适用于在替换中使用glob字符(例如*
)。
注意:正如@thatotherguy在评论中指出的那样,替换词必须具有平衡的引号(和大括号),即使引用了最外层的扩展。因此y="${x:-'}"
即使y=${x:-"'"}
无效,}
也无效。那是因为......
...参数替换"的结束
}
是第一个man bash
没有 通过反斜杠或带引号的字符串进行转义,而不是在 嵌入式算术扩展,命令替换或参数 扩展
(引自y="${x:-""}"
,但在Posix中可以找到非常相似的措辞)
此外,双引号内未引用双引号。因此,在ant setup-eclipse-project
中,双引号中的所有都会被引号删除删除。
答案 1 :(得分:2)