4

重複の可能性:
Bash:パイプの右側にアレイを構築できません

ファイルから配列を作成する必要があります。データを保存する場所のインデックスを計算する必要があります。読み取りループの外に出ると、配列がなくなっているように見えます。なぜ???

以下のスクリプトは、問題を示しています。

#!/bin/bash

echo -e "15\n21\n33" | while read i ; do
    ar[$i]="set"
    echo ${!ar[@]}
    echo ${ar[@]}
  done

echo
echo outside loop:  
echo ${!ar[@]} 
echo ${ar[@]} 

出力からわかるように、配列のインデックスとコンテンツの出力はループの外では機能しなくなりました。

15
set
15 21
set set
15 21 33
set set set

outside loop:
4

1 に答える 1

6

@ormaaj のコメントに答えがあります。ループをパイプラインに入れないでください。これらの数値は一定ではないと想定しているため、代わりにプロセス置換からリダイレクトします。

while read i ; do
    ar[$i]="set"
    echo ${!ar[@]}
    echo ${ar[@]}
done < <(process to generate indices) 

もう 1 つの選択肢は、最後の echo ステートメントをループと同じサブシェルに配置することです。

process to generate indices | {
    while read i ; do
        ar[$i]="set"
        echo ${!ar[@]}
        echo ${ar[@]}
    done

    echo
    echo outside loop:  
    echo ${!ar[@]} 
    echo ${ar[@]} 
}
于 2012-10-26T20:45:06.520 に答える