2013-08-30 99 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"