#!/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
吗?
当您运行此命令时:
echo -e $RESULT
Bash在;上执行分词。$RESULT
也就是说,它通过空格将其拆分,并将生成的标记作为单独的参数传递给echo
. 所以你基本上是在运行这个:
echo -e file1.txt file2.txt file3.txt
并且echo
无法知道其中$RESULT
包含换行符。
(-e
顺便说一句,这里并不真正相关。-e
不影响换行符的处理,只影响实际序列,例如\n
- 反斜杠后跟n
.)
-e
无关紧要。
echo "$RESULT"
看到一个参数,一个带有嵌入换行符的字符串。
echo $RESULT
看到的参数与$RESULT
. 分隔这些单词的空格(包括换行符)被 shell 吃掉了。
在这种情况下,它将不同的行视为单独的参数。