変数間接の使用

変数間接の使用

シェルのforループで変数を使用したいと思います。

私の現在のコード:

VAA="1st_first"
VAB="2nd_second"
VAC="3rd_third"

for i in VAA VAB VAC; do
       if [[ "${i}" =~ ^[A-Za-z]*$ ]]; then
              echo "$i variable is a word"
       else
              echo "$i variable is not a word"
       fi
done

予想される結果は、$ VAR1、$ VAR2、および$ VAR3変数を確認してから単語として印刷することです。

現在の出力は次のとおりです。

VAA variable is a word
VAB variable is a word
VAC variable is a word

「$VAA」に数字が含まれているため、これは正しくありません。

forループの外で変数を使用するには?

ベストアンサー1

私は通常、このような問題を解決するために連想配列を使用します。しかし、これが有効な解決策であるかどうかはわかりません。ただし、これは出力に表示される元の順序を保証しません。

#!/bin/bash

declare -A varCheck
varCheck=( [VAA]="stfirst" [VAB]="2nd_second" [VAC]="3rd_third" )


for var in ${!varCheck[@]}; do
       if [[ "${varCheck[$var]}" =~ ^[A-Za-z]*$ ]]; then
              echo "${var} variable is a word"
       else
              echo "${var} variable is not a word"
       fi
done

出力:

VAB variable is not a word
VAC variable is not a word
VAA variable is a word

おすすめ記事