forループを使用してvar0、var1、var2、var3を宣言しました。 forループ内で変数をエコーする方法は?コードは次のとおりです。
#!/bin/bash
for i in {0..3}
do
export var$i=$i
done;
そこでvar0、var1、var2、var3を定義しました。ループからどのようにアクセスできますか?
私は次を試しました
for i in {0..3}
do
echo $var$i
tmpvar=var$i
echo $tmpvar
done
しかし、誰も私にvar0、var1の値を教えてくれませんでした。最初のエコーは「0,1,2,3」だけを印刷し、2番目のエコーは「var0、var1、var2、var3」を印刷しました。そうですか?私は価値が欲しい..
ベストアンサー1
一方、
var0=a
var1=b
var2=c
ksh93 または bash 4.3 以降の場合、namerefs を使用して個々の変数を指すことができます。
for i in 0 1 2; do
typeset -n p="var$i"
echo "$p"
done
ただし、変数は別々のスカラーとして明示的に必要であり(たとえば、環境を介して変数を渡すため)、厳密な標準シェルを使用せず、代わりにBashまたはkshを使用しない限り、配列を使用する必要があります。
#!/bin/bash
a=(a b c)
for i in 0 1 2; do
echo "${a[i]}"
done
またはインデックスを無視してください。
for x in "${a[@]}"; do
echo "$x"
done
(もちろん、Zshにはデフォルトで1からインデックスが付けられた配列もあるため、最初の配列は直接機能しません。)