私の環境には、次の形式を使用して定義された柔軟な数の変数があります。
Var1Value=A
Var2Value=B
Var3Value=C
今、変数が存在する限り、変数を繰り返したいと思います。擬似コードで:
i=1
while [exists "Var"$i"Value"]; do
echo "found variable, now doing some more complex processing logic"
#do some more stuff
i=$((i + 1))
done
(配列を使用せずに)bashでこれを行うことはできますか?
ベストアンサー1
使う名前参照。これは他の変数へのポインタと少し似ています(Bash 4.3以降)。
Var1Value=A
Var2Value=B
Var3Value=C
Var4Value=""
for (( i=1 ; ; i++ )); do
n="Var${i}Value" # the name of var
declare -n p="$n" # reference to the var
[ "${p+x}" ] || break # see if it exists
echo "$n: '$p'"
done
"${p+x}"
x
指す変数が存在するかどうかを評価するため、設定されているがp
空の変数も処理されます。
または、${!n}
名前付き変数を参照する間接変数拡張を使用しますn
。
for (( i=1 ; ; i++ )); do
n="Var${i}Value" # the name of var
[ "${!n+x}" ] || break # see if it exists
echo "$n: '${!n}'"
done
しかし、実際には配列を使用する必要があります。ここでは、3つの選択肢のどれも標準ではありませんが、配列が最も論理的です。
VarValue=( A B C )
for value in "${VarValue[@]}"; do
# use "$value" here
printf 'Value is "%s"\n' "$value"
done
また見なさい:
- バッシュFAQ 006:可変変数(間接変数、ポインタ、参照)または関連配列を使用する方法は?