为什么“读”对于相同的输入表现不同?

时间:2011-03-21 15:12:55

标签: bash built-in

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

如何使用$'\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}"