#!/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
字符的解释吗?
答案 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)
在这种情况下,它将不同的行视为单独的参数。