a1="one"
a2="two"
a3="three"
for ((i=1;i<=3;i=i+1)); do
echo $a$i
done
私は次を試しました
echo ${a$i}
echo $((ai))
echo ${a}${i}
c=$(echo a$i)
しかし、誰も正解を持っていません。
ベストアンサー1
これはksh93構文です(現在、((i=1;i<=3;i=i+1))
andでもサポートされています(andの間にスペースが必要です)。bash
zsh
for
((
zsh
ksh93
最新バージョンbash
(4.3、2014以降)では、次のことができます。
a1="one"
a2="two"
a3="three"
for ((i=1;i<=3;i=i+1));do
typeset -n name="a$i"
printf '%s\n' "$name"
done
では、zsh
変数間接構文を使用できます:${(e)code}
(1996年5月以降)、${(P)name}
(1999年以降)
a1="one"
a2="two"
a3="three"
for ((i=1;i<=3;i=i+1));do
name=a$i
printf '%s\n' "${(P)name}"
# or
code="\$a$i"
printf '%s\n' "${(e)code}"
# or combined:
printf '%s\n' "${(e):-\$a$i}" "${(P)${:-a$i}}"
done
bash
また、独自の変数間接指定機能を追加しましたが、ksh93とほぼ反対の意味を持つ別の構文(1996年12月2.0)を使用しました。
a1="one"
a2="two"
a3="three"
for ((i=1;i<=3;i=i+1));do
name=a$i
printf '%s\n' "${!name}"
done
POSIXシェル(ksh93、bash、またはzshを含むがこれらに限定されない)を使用すると、いつでも次のことができます。
a1="one"
a2="two"
a3="three"
i=1; while [ "$i" -le 3 ]; do
name=a$i
eval "value=\${$name}"
printf '%s\n' "$value"
i=$((i + 1))
done