【问题标题】:Echo Stdin confusion回声标准输入混乱
【发布时间】:2020-11-10 17:36:11
【问题描述】:

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

echo < file1.txt

它返回一个空行。但是cat &lt; file1.txt返回的是file1.txt的内容。

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

【问题讨论】:

  • 是什么让您认为 echo “打印发送给它的任何内容”?在 bash 会话中查看 help echo
  • 是的,我看到并了解了我的误解。谢谢。

标签: linux bash echo stdout stdin


【解决方案1】:

这是重复的,已解决: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 扩展文件中的 \n\b\0351... 转义序列(正如 UNIX 兼容的 echo 实现所做的那样,但不是全部),那么您宁愿使用printf

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多