シェルの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
答え2
変数間接の使用
$i
iteratorという単語が表示されますi
。
${!i}
変数の内容が表示されます。これは可変間接。
だから、使用するコンテンツを確認するには${!i}
解決策は次のとおりです。
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
結果:
VAA variable is not a word
VAB variable is not a word
VAC variable is not a word