2016-08-12 17 views
1

Bashでは動的parameter expansionが可能ですか?動的パラメータ拡張

$ TEST_1=12345 
$ TEST_2=54321 
$ for i in 1 2; do echo ${TEST_$i}; done 
-bash: ${TEST_$i}: bad substitution 
$ echo ${!TEST_*} 
TEST_1 TEST_2 

所望の出力:

$ for i in 1 2; do echo ${TEST_$i}; done 
12345 
54321 
+3

あなたのニーズに合った配列やハッシュはありますか? –

+0

番号付き変数を使用しているときは、いつでもほとんどの場合配列を使用する必要があります。 – Barmar

答えて

2

あなたは間接的なパラメータ展開を使用することができます(男性はbashを参照してください):

If the first character of parameter is an exclamation point (!), it 
introduces a level of variable indirection. Bash uses the value of the 
variable formed from the rest of parameter as the name of the variable; 
this variable is then expanded and that value is used in the rest of 
the substitution, rather than the value of parameter itself. This is 
known as indirect expansion. The exceptions to this are the expansions 
of ${!prefix*} and ${!name[@]} described below. The exclamation point 
must immediately follow the left brace in order to introduce indirec- 
tion. 

です:

for i in 1 2; do var="TEST_$i"; echo "${!var}"; done 

テスト:

$ TEST_1=12345 
$ TEST_2=54321 
$ for i in 1 2; do var="TEST_$i"; echo "${!var}"; done 
12345 
54321 
関連する問題