#!/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`在与变量一起使用时不起作用?
#!/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`在与变量一起使用时不起作用?
当您运行此命令:
echo -e $RESULT
猛砸上$RESULT
执行word splitting;也就是说,它将它分割为空格,并将结果标记作为单独的参数传递给echo
。所以你基本上是运行以下命令:
echo -e file1.txt file2.txt file3.txt
和echo
没有办法知道$RESULT
包含新行的方式。
(该-e
,顺便说一下,是不是在这里真的很重要。-e
不影响只喜欢\n
—反斜线后跟n
实际序列的换行符治疗。)
在这种情况下,它将不同的行视为单独的参数。
-e
是无关紧要的。
echo "$RESULT"
看到一个参数,一个带有嵌入换行符的字符串。
echo $RESULT
看到的数字与$RESULT
中的字数一样多。分隔这些单词的空格(包括换行符)被shell所用。