2013-08-30 137 views
13

我有一個變量final_list這是由一個可變url在一個循環中追加爲:連接兩個字符串變量在bash追加換行符

while read url; do 
    final_list="$final_list"$'\n'"$url" 
done < file.txt 

令我驚訝的\n被追加爲一個空間,所以結果是:

url1 url2 url3 

,而我想:

url1 
url2 
url3 

什麼是錯的?

回答

16

在變量"$final_list"中有很多新行。 echo像這樣用雙引號

echo "$final_list" 
url1 
url2 
url3 

或更好的使用printf

printf "%s\n" "$final_list" 
url1 
url2 
url3 
+0

謝謝。你能解釋一下發生了什麼。 –

+3

引用在Unix shell中非常重要。如果沒有引號,shell不會應用任何擴展規則並將新行視爲空格。 – anubhava

+3

如果沒有引號,'$ final_list'擴展中的任何空格(包括換行符)將被視爲字詞分隔符,而不是字面字符進行打印。 'echo'只接收3個參數,即實際的URL。用引號,'echo'接收一個參數,即包含url的字符串和將它們分開的換行符。 – chepner

2

這可能取決於你如何試圖顯示最終結果。嘗試在雙引號內輸出結果變量:

echo "$final_list"