Answers:
如果您使用
echo "$(cat input.txt)"
它会正常工作。
echo的输入可能由换行符分隔,并且它将作为单独的命令进行处理,因此结果将没有换行符。
echo "$(date) something"
从日期的输出中删除尾随的换行符,使回显在同一行上输出日期和“某物”。如果您需要“按原样”存储文件或命令输出,请使用mapfile(help mapfile
)read -rd ''
或while读取循环。
引用bash手册页的第Command Substitution
:
嵌入的换行符不会被删除,但是可以在分词时将其删除。
再进一步,同一部分:
如果替换出现在双引号中,则不会对结果执行单词拆分和路径名扩展。
这就是为什么echo "$(cat /etc/passwd)"
。
另外,应该知道,用POSIX规范替换命令会删除尾随的换行符:
$ echo "$(printf "one\ntwo\n\n\n")"
one
two
因此,通过输出文件$(cat file.txt)
会导致尾随换行符的丢失,如果整个文件的完整性是优先考虑的,那将是一个问题。
您可以保留换行符,例如,通过将IFS设置为空:
$ IFS=
$ a=$(cat links.txt)
$ echo "$a"
link1
link2
link3