タイトルに正しい単語を使用しているかどうかはわかりません。以下を試しています。
while read line; do
echo "$line"
exit;
done; <( echo "foo\n"; exit )
while
しかし、動作が停止します。ループがプロセスから入力を受け取らないようですecho
。これを行う正しい方法と、これが間違った理由を知っている人はいますか?
私はこれを行うことができます:
echo "foo" | while read line; do echo "$line"; done;
しかし、私は学習目的のためだけに最初の方法を選びたいと思います。プロセスの交換が必要かどうかはわかりません。
答え1
ループ後もスクリプトが続きます${line}
。
セミコロンを削除し、done
プロセス置換の間に入力リダイレクトを入れます。
done < <( echo "foo\n"; exit )
exit
プロセス交換の実行を明示的に終了する必要はありません。
ただし、テキストファイル処理の場合は通常、またはをsed
使用する方が良いと安全でありawk
、これはより良いパフォーマンスを提供します。テキスト行を処理するために本当にBashを使用する必要がある場合は、通常非常に次のことをお勧めします。(ループの最初の行のみが表示されます)
while IFS= read -r line ; do
あなたが本当に他のものが必要であることを知らない限り。
これは、Bashで区切り文字とエスケープ文字を使用して解析、圧縮、および解釈される空白、改行、およびバックスラッシュを含む入力行の生の処理に必要です。