为什么bash不断向变量添加前导空格?

时间:2016-01-19 18:58:43

标签: bash variables

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)中的错误吗?

2 个答案:

答案 0 :(得分:2)

在参数(变量)扩展后通过分词删除未加引号的空格。前导空格是echo在其参数之间输出的内容。

你的第一个例子,

echo foo${var}

导致字符串foobar被大量空格分隔,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然后输出为foobar由单个空格分隔。
echo ${var}相同的是xpanded为:
echo bar和产品bar。 试试"手工"。结果将是相同的 如果您想要"保存"空格使用双引号。 echo "foo${var}"将扩展为:
echo "foo bar"并以这种确切的形式回应。