コマンド置換文字列を含むBash 'while'読み取りループが入力全体を読み取らないのはなぜですか?

コマンド置換文字列を含むBash 'while'読み取りループが入力全体を読み取らないのはなぜですか?

非常に基本的なBashスクリプトを見てください。

#!/bin/bash
while read l
do
  echo $l
  echo "next one"
done <<< $(ps aux)

私のコンピュータには複数のプロセスがあり、ps auxコマンドは端末で正しく実行されます。

私はただ得る一つループ内の反復とpsコマンド出力は同じ行に提供されます。期待どおりに機能しないのはなぜですか?

答え1

bash<バージョンでは4.4-beta二重引用符を追加する必要があります。

#!/bin/bash
while read l
do
  echo $l
  echo "next one"
done <<< "$(ps aux)"

望むより:


一般的に、プロセス置換を使用する方が良いと思います。

#!/bin/bash
while read l
do
  echo $l
  echo "next one"
done < <(ps aux)

(問題を避けるため、使いたいかもしれませんIFS=)。

またはより良い方法はawk

ps aux | awk '{print $0; print "next one"}'

関連情報