0

こんにちはみんな厄介なタイトルを申し訳ありませんが、説明するのは少し微妙だと思います。これが私の問題です。awkからの入力を読み取るwhileループでカウント(i)を保持し、ループの後にiの値を出力したいと思います。ただし、ループの後でiはゼロに戻ります。以下は私のプログラムの簡略化されたバージョンです。実際には、ループ内で文字列照合を行ったため、一部の行がスキップされ、インクリメントされません。

私はawkを削除して、別の通常のwhileループを実行しようとしましたが、iの値はループの後に保持されます。したがって、構文エラーが原因ではないと思います。

どんなアイデアでも大歓迎です!

#!/bin/bash
arr=();
i=0;
awk -F '{print $1}' SOMEFILE | while read var
do
  echo $var;
  arr[i]=$var;
  i=$((i+1));
  echo $i;
done
echo $i;
4

1 に答える 1

2

whileループはパイプライン内にあるため、サブプロセスとして実行されており、iの値はそのサブプロセスに対してローカルです。値を維持する方法はいくつかあります。パイプラインで実行する代わりに名前付きパイプを使用するか、プロセス置換を使用するか、補間ヒアドキュメントを使用します。後者の例を次に示します。

while read var; do ... done << EOF
$( awk ... )
EOF
于 2012-04-16T20:06:20.233 に答える