回声Stdin混淆



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

echo < file1.txt

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

既然echo打印发送给它的任何内容,为什么echo不打印file1.txt的内容?

这是重复的,已解决:https://unix.stackexchange.com/questions/63658/redirecting-the-content-of-a-file-to-the-command-echo

你可以将所有你想要的重定向到echo,但它不会对它做任何事情。echo不读取它的标准输入。它所做的只是向标准输出写入由空格字符分隔并由换行符终止的参数(以及一些扩展了转义序列的echo实现和/或以-开头的参数可能被视为选项(。

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

echo "$(cat my_file.txt)"

请注意,$(...)会从该cat命令的输出中去掉尾随的换行符,而echo会向后添加一个

还要注意,除了使用zsh之外,您不能在命令的参数中传递NUL字符,因此以上内容通常不适用于二进制文件。yash还将删除不属于有效字符的字节。

如果想要这样做的原因是因为您希望echo扩展nb351。。。文件中的转义序列(与符合UNIX的echo实现一样,但不是全部(,那么您宁愿使用printf

printf '%bn' "$(cat my_file.txt)"

echo相反,该文件是可移植的,如果文件的内容以-开头,则不会出现问题。

相关内容

  • 没有找到相关文章

最新更新