Bash - 带有前导空格的变量的参数扩展

Bash - 带有前导空格的变量的参数扩展

我一直想知道 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'

它被解析为字段onetwoand three;同样你的第二个例子是

echo   one   two    'and three'

它也被解析为字段onetwoand three

相关内容