作业确实not删除换行符,它实际上是echo
做这个。您只需在字符串周围加上引号即可维护这些换行符:
echo "$testvar"
这将给出您想要的结果。请参阅以下演示记录:
pax> cat num1.txt ; x=$(cat num1.txt)
line 1
line 2
pax> echo $x ; echo '===' ; echo "$x"
line 1 line 2
===
line 1
line 2
The reason为什么换行符被空格替换不是entirely与echo
命令,而是事物的组合。
当给出命令行时,bash
根据文档将其拆分为单词IFS
多变的:
IFS:用于扩展后分词的内部字段分隔符...默认值为<space><tab><newline>
.
这指定默认情况下,这三个字符中的任何一个都可以用于将命令拆分为单独的单词。之后,单词分隔符就消失了,剩下的只是单词列表。
将其与echo
文档(一个bash
内部命令),你会明白为什么输出空格:
echo [-neE] [arg ...]:输出参数,用空格分隔,后跟换行符。
当你使用echo "$x"
,它迫使整个x
变量为single词根据bash
,因此它没有被分割。您可以通过以下方式查看:
pax> function count {
...> echo $#
...> }
pax> count 1 2 3
3
pax> count a b c d
4
pax> count $x
4
pax> count "$x"
1
在这里,count
函数只是打印出给定参数的数量。这1 2 3
and a b c d
变体显示了它的实际作用。
然后我们尝试使用两个变体x
多变的。唯一的那个without引号显示有四个单词,"test"
, "1"
, "test"
and "2"
。添加引号就可以了one一个字"test 1\ntest 2"
.