Linux 回声标准

Linux 回声标准,linux,bash,echo,stdout,stdin,Linux,Bash,Echo,Stdout,Stdin,我创建了两个文件,即file1.txt和file2.txt。 当我写作时 echo < file1.txt echo

我创建了两个文件,即file1.txt和file2.txt。 当我写作时

echo < file1.txt
echo
它返回一个空行。但是
cat
返回file1.txt的内容


既然echo打印发送给它的内容,为什么echo不打印文件1.txt的内容?

这是重复的,已经解决了:

你可以重定向所有你想要的
echo
,但它不会做任何事情<代码>回显
不读取其标准输入。它所做的一切就是将其参数写入标准输出,这些参数由空格字符分隔,并以换行符终止(对于一些
echo
实现,其中一些转义序列已展开,和/或以
-
开头的参数可能被视为选项)

如果希望
echo
显示文件内容,则必须将该内容作为参数传递给
echo
。比如:

echo "$(cat my_file.txt)"
请注意,
$(…)
从该
cat
命令的输出中去除尾随的换行符,并且
echo
一个添加回

另外请注意,除了使用
zsh
,您不能在命令的参数中传递NUL字符,因此上述命令通常不适用于二进制文件
yash
还将删除不构成有效字符一部分的字节

如果希望这样做的原因是因为希望
echo
展开
\n
\b
\0351
。。。文件中的转义序列(正如符合UNIX的
echo
实现所做的,但不是全部),那么您最好使用
printf

printf '%b\n' "$(cat my_file.txt)"

echo
相反,如果文件的内容以
-

开头,则该文件是可移植的,不会出现问题。是什么让您认为echo“打印发送给它的内容”?请参阅bash会话中的帮助回声。是的,我看到并了解了我的误解。非常感谢。