評価変数=バックグラウンドコマンド

評価変数=バックグラウンドコマンド

次のコードがあります

for name in a b c d; do
    for i in {01..12}; do
        eval test_${name}_{i}=`some command`
    done
done

バックグラウンドで割り当てを実行しようとしていますが、次のシェルスクリプトでは機能しません。

for name in a b c d; do
    for i in {01..12}; do
        eval test_${name}_{i}=`some command` & 
    done
done
wait
echo $test_a_01

私はnull値を得ました

ベストアンサー1

そのような値を得ることはできません。バックグラウンドプロセスは他のプロセス内で実行する必要があります。それ以外の場合は、デフォルトのシェルから独立することはできません。したがって、値をデフォルトのシェルに「保存」することはできません。

代わりに、出力をファイル(または複数のファイル)に保存できます。

for name in a b c d; do
    for i in {1..12}; do
        printf "test_${name}_${i}=%s\n" "$(some command "$name" "$i")" >> output & 
    done
done
wait

シェル変数に表示されるようにするには、ファイルから読み直すことができます。ここでは、Bashで連想配列を使用します。

declare -A outputs
while IFS== read -r key value; do
    outputs["$key"]="$value"
done < output
echo ${outputs[test_b_7]}

おすすめ記事