1

为什么读取来自管道和heredoc的相同输入的行为不同:

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

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

4

3 回答 3

3

这里的文档\n末尾有一个隐含的换行符 ( );printf ""什么都不输出。我不知道摆脱隐式换行符的方法。

于 2011-03-21T15:17:13.057 回答
2

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

while read line; do if test -n "$line"; then echo "line=$line"; fi; done <<< ""
于 2011-03-21T15:25:25.997 回答
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}"
于 2011-03-25T11:09:34.067 回答