このスクリプトがあります
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
。