1

パイプとヒアドキュメントからの同じ入力で読み取りの動作が異なるのはなぜですか。

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

2番目のケースで出力を無効にするにはどうすればよいですか?

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 に答える