echo $HOSTNAME 결과는 변수 [중복]의 키가 됩니다.

echo $HOSTNAME 결과는 변수 [중복]의 키가 됩니다.

속성
server1=abc,def,ghc
server2=xyz,tes,iuy

#!/bin/sh

echo $server1
abc,def,ghc

echo $HOSTNAME
server1

위의 정보를 가지고 테스트 변수에 "abc, def, ghc"를 출력하고 싶습니다.

echo \$$HOSTNAME
$server1

bash-4.1$ test=`echo \$$HOSTNAME`
bash-4.1$ echo $test
8722HOSTNAME

Perl/bash에서 이 작업을 어떻게 수행할 수 있나요?

답변1

man 1 bash설명하다:

인수의 첫 번째 문자가 느낌표(!)인 경우 첫 번째 수준 변수 간접 참조가 도입됩니다. Bash는 나머지 인수로 구성된 변수 값을 변수 이름으로 사용합니다. 그런 다음 해당 변수를 확장하고 인수 자체의 값이 아닌 나머지 대체에 해당 값을 사용합니다. 이를 간접 확장이라고 합니다.

$ server1=abc,def,ghc
$ HOSTNAME=server1
$ echo ${!HOSTNAME}
abc,def,ghc

답변2

배쉬에서:

$ server1=abc,def,ghc
$ HOSTNAME=server1
$ eval "echo \$$HOSTNAME"
abc,def,ghc

Perl에서는 (엄격하지 않고):

$server1 = "abc,def,ghc";
$HOSTNAME = "server1";
print "$$HOSTNAME\n";

두 변형 모두 매우 훌륭하지 않으며 깔끔한 스크립팅의 많은 경계를 넘습니다.

관련 정보