假设我有以下内容:
foo1=abc
i=1
a="FOO${i}"
echo ${${a}}
echo ${`echo $a`} # I also tried that
我收到错误bash: ${${a}}: bad substitution
。
答案1
${!parameter}
您可以在您的情况下使用参数间接,即${!a}
:
$ foo1=abc
$ i=1
$ a="foo${i}"
$ echo "${!a}"
abc
来自“参数扩展”部分man bash
:
${参数}
…………
如果参数的第一个字符是感叹号 (!),则它引入了一级变量间接寻址。 Bash 使用由参数的其余部分形成的变量的值作为变量的名称;然后扩展该变量,并在其余替换中使用该值,而不是参数本身的值。
答案2
您可以使用eval
它(它可以与任何 POSIX shell 一起使用,包括 bash):
eval 'echo $'$a
为了显示:
#!/bin/bash -i
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS2='Second prompt \u@\h:\w\$ '
PS3='Third prompt \u@\h:\w\$ '
echo "PS1:$PS1"
for n in 3 2 1
do
eval 'PS0="$PS'$n'"'
echo "$PS0"
done
产生(调用脚本“foo”):
$ ./foo
PS1:${debian_chroot:+($debian_chroot)}\u@\h:\w\$
Third prompt \u@\h:\w\$
Second prompt \u@\h:\w\$
${debian_chroot:+($debian_chroot)}\u@\h:\w\$