在bash附加换行符中连接两个字符串变量

Ama*_*tam 17 linux bash shell

我有一个变量final_list,它url在循环中附加一个变量:

while read url; do
    final_list="$final_list"$'\n'"$url"
done < file.txt
Run Code Online (Sandbox Code Playgroud)

令我惊讶的\n是,它作为空格附加,因此结果是:

url1 url2 url3
Run Code Online (Sandbox Code Playgroud)

虽然我想:

url1
url2
url3
Run Code Online (Sandbox Code Playgroud)

怎么了?

anu*_*ava 21

变量中有很多新行"$final_list".echo它是这样的双引号:

echo "$final_list"
url1
url2
url3
Run Code Online (Sandbox Code Playgroud)

或更好地使用printf:

printf "%s\n" "$final_list"
url1
url2
url3
Run Code Online (Sandbox Code Playgroud)

  • 如果没有引号,`$ final_list`扩展中的任何空格(包括换行符)都会被视为单词分隔符,而不是要打印的文字字符.`echo`只接收3个参数,即实际的URL.使用引号,`echo`接收一个参数,包含url的字符串和分隔它们的换行符. (4认同)
  • 引用在Unix shell中至关重要.没有引号shell不应用任何扩展规则并将新行视为空格. (3认同)