为什么要“读”?使用相同的输入会有不同的行为吗?

发布于 2024-10-25 01:44:52 字数 354 浏览 2 评论 0原文

为什么 read 对于来自 a 的相同输入的行为不同管道和heredoc:

printf "" | while read line; do echo "line=$line"; done   # outputs nothing    
while read line; do echo "line=$line"; done <<< ""        # outputs 'line='

如何在第二种情况下禁用输出?

Why does read behave differently with the same input from a pipe and a heredoc:

printf "" | while read line; do echo "line=$line"; done   # outputs nothing    
while read line; do echo "line=$line"; done <<< ""        # outputs 'line='

How can I disable output in the second case?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夕色琉璃 2024-11-01 01:44:52

这里的文档末尾有一个隐式换行符(\n); printf "" 不输出任何内容。我不知道如何摆脱隐式换行符。

The here document has an implicit newline (\n) at the end; printf "" outputs nothing whatsoever. I don't know offhand of a way to get rid of the implicit newline.

往事随风而去 2024-11-01 01:44:52

如果你可以丢弃所有空行......

while read line; do if test -n "$line"; then echo "line=$line"; fi; done <<< ""

If you can discard all empty lines...

while read line; do if test -n "$line"; then echo "line=$line"; fi; done <<< ""
辞旧 2024-11-01 01:44:52

使用 $'\c' 怎么样:

man bash | less -p '\\c * suppress trailing newline'

str=""
while read line; do echo "line=$line"; done <<<
\c'"${str}"

str="abc"
while read line; do echo "line=$line"; done <<<
\c'"${str}"

How about using $'\c':

man bash | less -p '\\c * suppress trailing newline'

str=""
while read line; do echo "line=$line"; done <<<
\c'"${str}"

str="abc"
while read line; do echo "line=$line"; done <<<
\c'"${str}"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文