【发布时间】:2013-08-30 14:54:52
【问题描述】:
我有一个变量final_list,在循环中附加了一个变量url:
while read url; do
final_list="$final_list"$'\n'"$url"
done < file.txt
令我惊讶的是,\n 被附加为一个空格,所以结果是:
url1 url2 url3
当我想要的时候:
url1
url2
url3
怎么了?
【问题讨论】:
我有一个变量final_list,在循环中附加了一个变量url:
while read url; do
final_list="$final_list"$'\n'"$url"
done < file.txt
令我惊讶的是,\n 被附加为一个空格,所以结果是:
url1 url2 url3
当我想要的时候:
url1
url2
url3
怎么了?
【问题讨论】:
变量"$final_list" 中有很多新行。 echo 像这样双引号:
echo "$final_list"
url1
url2
url3
或者更好地使用printf:
printf "%s\n" "$final_list"
url1
url2
url3
【讨论】:
$final_list 扩展中的任何空格(包括换行符)都被视为单词分隔符,而不是要打印的文字字符。 echo 仅接收 3 个参数,即实际 URL。使用引号,echo 接收一个参数,即包含 url 的字符串和分隔它们的换行符。
这可能取决于您尝试显示最终结果的方式。尝试在双引号内输出结果变量:
echo "$final_list"
【讨论】:
如果有人愿意尝试,可以再添加一个选项。
带字符串值:
命令:echo "This is the string I want to print in next line" | tr " " "\n"
输出:
This
is
the
string
I
want
to
print
in
next
line
使用变量:
finallist="url1 url2 url3"
url="url4 url5"
echo "$finallist $url" | tr " " "\n"
输出:
url1
url2
url3
url4
url5
如果您希望一行中的单词少而下一行中的单词少,请尝试使用不同的分隔符。 (如 - 或 : 或 ; 或等...)
【讨论】: