Echo Stdin 混乱
Echo Stdin confusion
我创建了两个文件,即 file1.txt 和 file2.txt。
当我写
echo < file1.txt
它returns 是一个空行。但是 cat < file1.txt
returns 的内容 file1.txt.
既然 echo 打印发送给它的任何内容,为什么 echo 不打印 file1.txt 的内容?
这是重复的并且已经解决:https://unix.stackexchange.com/questions/63658/redirecting-the-content-of-a-file-to-the-command-echo
您可以将所有内容重定向到 echo
,但它不会对其执行任何操作。 echo
不读取其标准输入。它所做的只是将其参数写入标准输出,参数由 space 字符分隔并以换行符终止(并且一些 echo
实现中有一些转义序列扩展 and/or 参数以-
可能被视为选项)。
如果您希望 echo
显示文件的内容,您必须将该内容作为参数传递给 echo
。类似于:
echo "$(cat my_file.txt)"
请注意,$(...)
从该 cat
命令的输出中去除了尾随的换行符,并且 echo
添加了 一个 。
另请注意,除了 zsh
,您不能在命令的参数中传递 NUL 字符,因此上述命令通常不适用于二进制文件。 yash
还将删除不属于有效字符的字节。
如果想要这样做的原因是因为您希望 echo
扩展文件中的 \n
、\b
、51
... 转义序列(作为符合 UNIX 的 echo
实现,但不是全部),那么您宁愿使用 printf
代替:
printf '%b\n' "$(cat my_file.txt)"
与echo
相反,后者是可移植的,如果文件内容以-
开头,不会有问题。
我创建了两个文件,即 file1.txt 和 file2.txt。 当我写
echo < file1.txt
它returns 是一个空行。但是 cat < file1.txt
returns 的内容 file1.txt.
既然 echo 打印发送给它的任何内容,为什么 echo 不打印 file1.txt 的内容?
这是重复的并且已经解决:https://unix.stackexchange.com/questions/63658/redirecting-the-content-of-a-file-to-the-command-echo
您可以将所有内容重定向到 echo
,但它不会对其执行任何操作。 echo
不读取其标准输入。它所做的只是将其参数写入标准输出,参数由 space 字符分隔并以换行符终止(并且一些 echo
实现中有一些转义序列扩展 and/or 参数以-
可能被视为选项)。
如果您希望 echo
显示文件的内容,您必须将该内容作为参数传递给 echo
。类似于:
echo "$(cat my_file.txt)"
请注意,$(...)
从该 cat
命令的输出中去除了尾随的换行符,并且 echo
添加了 一个 。
另请注意,除了 zsh
,您不能在命令的参数中传递 NUL 字符,因此上述命令通常不适用于二进制文件。 yash
还将删除不属于有效字符的字节。
如果想要这样做的原因是因为您希望 echo
扩展文件中的 \n
、\b
、51
... 转义序列(作为符合 UNIX 的 echo
实现,但不是全部),那么您宁愿使用 printf
代替:
printf '%b\n' "$(cat my_file.txt)"
与echo
相反,后者是可移植的,如果文件内容以-
开头,不会有问题。