为什么read对来自管道和heredoc的相同输入的行为有所不同:
printf "" | while read line; do echo "line=$line"; done # outputs nothing
while read line; do echo "line=$line"; done <<< "" # outputs 'line='
如何在第二种情况下禁用输出?
答案 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}"