为什么bash在$(cat文件)中删除\ n?
如果我有包含以下内容的文件input.txt
:
hello world !
然后执行bash命令echo $(cat input.txt)
将输出:
hello world !
为什么以及如何修复它以准确输出文件中文件的内容?
如果你使用
echo "$(cat input.txt)"
它会正常工作。
可能 echo的输入由换行符分隔,并且它将作为单独的命令处理它,因此结果将没有换行符。
引用bash手册页, Command Substitution
部分:
嵌入的换行不会被删除,但在分词时可能会被删除。
更进一步,相同的部分:
如果替换出现在双引号内,则不会对结果执行单词拆分和路径名扩展。
这就是echo "$(cat /etc/passwd)"
作用原因。
另外,应该知道, POSIX规范的命令替换会删除尾随换行符:
$ echo "$(printf "one\ntwo\n\n\n")" one two
因此,通过$(cat file.txt)
输出文件可能会导致丢失尾随换行符,如果整个文件完整性是优先级,则可能会出现问题。