5

同じ名前のディレクトリ内の何かを上書きするリスクを最小限に抑えるために、出力を保存するための新しいファイルを作成しないようにしています。while read line do done < fileファイルに出力してからループを使用するのではなく、パイプを使用してストリーム内の各行を評価しようとしています。何かのようなもの:

echo -e "1\n2\n3\n4\n5" | #evaluate current line separately#

どうにかして各行を配列に読み込んでから、配列内の要素を評価できますか? または、誤ってファイルを上書きしないようにするためのより良い方法はありますか?

4

3 に答える 3

10

ではbash、プロセス置換を使用するのが一般的な方法です。

while read line ; do
    ...
done < <( commands producing the input)
于 2012-08-03T08:59:11.527 に答える
4

中途半端だった…

echo -e "1\n2\n3\n4\n5" | while read line; do
    ...
done

bash はパイプラインの各部分を個別のプロセスで実行し、そこで定義された変数はそのブロックの後は保持されないことに注意してください。(ループは現在のシェル プロセスで実行されるため、ksh93 はそれらを保存します。)

于 2012-08-03T09:08:42.647 に答える
1

一意の名前を持つ一時ファイルを使用mktempまたは作成することで、ファイルの上書きを回避できます。tempfileただし、チョロバの回答のようにプロセス置換を使用します。

于 2012-08-03T09:13:20.933 に答える