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
答案 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