0
#!/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吗?

4

3 回答 3

4

当您运行此命令时:

echo -e $RESULT

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

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

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

-e顺便说一句,这里并不真正相关。-e不影响换行符的处理,只影响实际序列,例如\n- 反斜杠后跟n.)

于 2012-08-13T20:25:14.560 回答
4

-e无关紧要。

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

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

于 2012-08-13T20:25:42.990 回答
0

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

于 2012-08-13T20:25:22.483 回答