动态参数扩展

时间:2016-08-12 11:21:09

标签: bash

parameter expansion可以动态Bash吗?

$ 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

1 个答案:

答案 0 :(得分:2)

您可以使用间接参数扩展(请参阅man 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