为什么`echo -e`在与变量一起使用时不起作用?

时间:2012-08-13 20:19:18

标签: bash echo

#!/bin/bash
RESULT=$(ls)

echo -e "$RESULT"  # prints the result of 'ls' with new lines
echo -e $RESULT    # prints the result of 'ls' in one line

为什么第二种方法会在一行中打印而不是为每个项目打印一行?不应该-e选项触发对\n字符的解释吗?

3 个答案:

答案 0 :(得分:4)

运行此命令时:

echo -e $RESULT

Bash在$RESULT上执行word splitting;也就是说,它通过空格将其拆分,并将生成的标记作为单独的参数传递给echo。所以你基本上是这样运行的:

echo -e file1.txt file2.txt file3.txt

并且echo无法知道$RESULT包含换行符。

(顺便说一下,-e在这里并不重要。-e不会影响换行符的处理,只会影响\n之类的实际序列 - a反斜杠后跟n。)

答案 1 :(得分:4)

-e无关紧要。

echo "$RESULT"看到一个参数,一个带有嵌入换行符的字符串。

echo $RESULT看到的参数与$RESULT中的单词一样多。分隔这些单词的空格(包括换行符)会被shell吃掉。

答案 2 :(得分:0)

在这种情况下,它将不同的行视为单独的参数。