シェルスクリプトに同じパターンを持つグローバル変数が複数あります。たとえば、次のようになります。
VALID_DOMESTIC_ANIMAL=(cat dog)
VALID_ACQUATIC_ANIMAL=(shark dolphin)
これでACQUATIC / DOMESTICである可能性がある別のパラメーターCATAGORYがあります。繰り返す予定のグローバル変数を選択するには?次のコードを試しました。
#!/bin/bash
VALID_DOMESTIC_ANIMAL=(cat dog)
VALID_ACQUATIC_ANIMAL=(shark dolphin)
CATAGORY=ACQUATIC
VALID_CATAGORY_ANIMAL=VALID_${CATAGORY}_ANIMAL
#echo "VALID_CATAGORY_ANIMAL ${VALID_CATAGORY_ANIMAL}"
for anime in "${VALID_CATAGORY_ANIMAL[@]}"; do
echo "${anime}"
done
出力を期待していましたが、shark dolphin
結果が出ました。VALID_ACQUATIC_ANIMAL
同じ名前の変数が存在する場合は、それを使用するようにbashスクリプトにどのように指示しますか?
答え1
答え2
これにより、状況がより明確になります。この変数には他の変数の名前が含まれています。その値を取得するには、シェルはまず変数名を拡張してから変数値を拡張する必要があります。
for anime in $(eval echo \${$VALID_CATAGORY_ANIMAL[@]}); do
eval
- 変数を拡張して実行のためにシェルに渡すには引数が必要です。
最初のドル記号をエスケープしたので、コマンドは次のように実行されます。
$(echo ${VALID_ACQUATIC_ANIMAL[@]}
ループの前に次の行を挿入できます。
echo $VALID_CATAGORY_ANIMAL #VALID_ACQUATIC_ANIMAL
echo \${$VALID_CATAGORY_ANIMAL[@]} #${VALID_ACQUATIC_ANIMAL[@]}
eval echo \${$VALID_CATAGORY_ANIMAL[@]} #shark, dolphin