2017-09-26 3 views
1

における変数のプリント値は、私は私にバッシュ - 配列

A 123 
B 143 
C 999 

の出力を与えるしかし、その代わりに、私は変数名ではなく、値を受け取る必要があり、この

A='123' 
B='143' 
C='999' 

declare -a arr=(A B C) 

for i in "{$arr[@]}" 
do 
    echo "@i" "$i" 
done 

のような何かをしたいです出力に(私は、出力の「@i」を参照してください...

答えて

2

あなたがループ内で変数名を保存するのではなく、それらの値をコピーしたい場合は、次のように使用することができます:

for i in "${arr[@]}"; do 
    echo "${!i}" 
done 

これはiの値はの名前として取られることを意味しますしたがって、ループ内に$A$Bおよび$Cが返されます。

もちろん、これは変数名を同時に印刷できることを意味します。使用して:

echo "$i: ${!i}" 

をそれはまったく同じではありませんが、あなたはまた、連想配列を使用することに興味がある可能性があり:

declare -A assoc_arr=([A]='123' [B]='143' [C]='999') 

for key in "${!assoc_arr[@]}"; do 
    echo "$key: ${assoc_arr[$key]}" 
done 
+0

優秀、これは私が探していたものです。 – Michael

+0

@Michael連想配列の使用に興味があるかもしれません。 –

1

私は$を追加することをお勧め:

declare -a arr=("$A" "$B" "$C") 
+0

はい、私はそれは例えばが、代替であることを理解します現実私は、変数名と値の両方を出力できるようにしたいと思います。それは可能ですか? – Michael