![配列に追加[重複]](https://linux33.com/image/94462/%E9%85%8D%E5%88%97%E3%81%AB%E8%BF%BD%E5%8A%A0%5B%E9%87%8D%E8%A4%87%5D.png)
このスクリプトがあります
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
。