var=" bar" (the whitespace is intentional)
echo foo${var}
产生
foo bar ("var" has leading whitespace)
但
echo ${var}
产生
bar ("var" has no leading whitespace)
为什么呢?这是bash 4.2.37(2)中的错误吗?
答案 0 :(得分:2)
在参数(变量)扩展后通过分词删除未加引号的空格。前导空格是echo
在其参数之间输出的内容。
你的第一个例子,
echo foo${var}
导致字符串foo
和bar
被大量空格分隔,bash
仅用于将两个字符串视为单独的参数,echo
输出由一个空格隔开。你的第二个例子,
echo ${var}
为echo
提供一个参数bar
,其中有大量的空格分隔命令和参数。
在每种情况下引用参数扩展会保留参数值中的所有空格。
$ var=" bar"
$ echo "foo${var}"
foo bar
$ echo "${var}"
bar
答案 1 :(得分:1)
当您发出echo
命令时,在将其作为"参数"处理之后放入的每个字符串。然后echo
回显所有"参数",由空格分隔。
因此echo foo${var}
首先由您的shell扩展为:
echo foo bar
然后输出为foo
,bar
由单个空格分隔。
与echo ${var}
相同的是xpanded为:
echo bar
和产品bar
。
试试"手工"。结果将是相同的
如果您想要"保存"空格使用双引号。 echo "foo${var}"
将扩展为:
echo "foo bar"
并以这种确切的形式回应。