我一直想知道 shell 中参数扩展的奇怪规则。
如果我声明
NUMBERS=" one two "
如果执行以下命令(请注意变量和常量字符串之间没有空格。)
echo ${NUMBERS}'and three'
Bash(以及 Dash 和 Kornshell)回应:
one two and three
然而,相同的输出是回显的:
echo ${NUMBERS} 'and three'
我的印象是,根据2.6.5 字段分割规则 3a,在扩展变量时,应忽略输入开头和结尾的 IFS 空格NUMBERS
。
为什么 shell 有时会在扩展和常量字符串之间放置空格,而有时则不然?
答案1
发生字段分裂后扩展,并且IFS
忽略开头和结尾的空格所有的输入(以避免在第一个“逻辑”字段之前或最后一个字段之后创建字段)。因此,当进行字段分割时,您的第一个示例是
echo one two 'and three'
它被解析为字段one
、two
和and three
;同样你的第二个例子是
echo one two 'and three'
它也被解析为字段one
、two
和and three
。