Bash: 이름이 다른 변수의 값인 변수를 에코합니다.

Bash: 이름이 다른 변수의 값인 변수를 에코합니다.

다음이 있다고 가정해 보겠습니다.

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(bash를 포함한 모든 POSIX 쉘에서 작동합니다).

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\$ 

관련 정보