#!/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所用。