속성
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";
두 변형 모두 매우 훌륭하지 않으며 깔끔한 스크립팅의 많은 경계를 넘습니다.