配列に追加[重複]

配列に追加[重複]

このスクリプトがあります

tests=()
igrepy -l $1 . | while read -r line
do
    // some processing
    tests+=("${second[0]}")
done
echo ${tests[@]}

「2番目」に結果があるかどうかを確認しましたが、結果が出ましたが、エコーは空の文字列を返します。ここで何の問題がありますか?これはrhel6にあります。 "igrepy"は、Pythonファイルのみを検索する大文字と小文字を区別しないgrepのエイリアスです。

ベストアンサー1

あなたが見ている問題は、標準の「パイプがサブシェルを生成する」ですbash

たとえば、次のようにすると

a=10
echo 100 | read a
echo $a

これはまだbashにa設定されます。10

あなたの場合

igreppy | while read ...
do
  ....
done

ループ内のすべてはwhileサブシェルにあります。

代わりに、プロセス置換を使用して書き換えることができます。

while read ...
do
  ....
done < <(igreppy ...)

ループ用のサブシェルは作成されませんwhile

おすすめ記事