var
반환 값이 VAR1
( $var
값 있음 )인 변수 ( )가 있습니다 VAR1
. 정의된 입력 파일이 있습니다 VAR1
( VAR1=ABCDEF
).
echo
값을 얻으 려면 어떻게 사용합니까 ?ABCDEF
$var
다른 많은 옵션을 시도했지만 항상 출력이 or echo $(echo $var)
로 나오지만 절대 그렇지 않습니다 . 나는 그것을 선언된 파일에서 사용했고 , 명령 프롬프트에서 사용해 보았습니다.VAR1
echo VAR1
ABCDEF
source
VAR1
답변1
bash
쉘을 사용한다고 가정합니다 .
$ source ./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ echo "${!var}"
ABCDEF
${!var}
당신을 사용하여가변 간접존재하다 bash
. 변수의 값은 var
확장할 변수의 이름을 가져오는 데 사용됩니다.
bash
이름으로 변수를 참조할 수도 있습니다 .
$ source ./file
$ echo "$VAR1"
ABCDEF
$ declare -n var="VAR1"
$ echo "$var"
ABCDEF
여기서 변수는 변수 var
를 참조하므로 확장되는 모든 항목 으로 확장됩니다 .VAR1
$var
$VAR1
이름 참조는 원래 ksh
선언된 셸의 기능 이었습니다 typeset -n
.
이름 참조는 셸 함수를 호출할 때 배열에 대한 참조를 전달하는 데 유용합니다.
모든 sh
셸에서:
$ . ./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ eval "echo \"\$$var\""
ABCDEF
이 eval
유틸리티는 재평가될 문자열을 사용합니다. 여기서는 문자열을 제공합니다 echo "$VAR1"
(확장 후 $var
).
문제는 eval
실수로 매개변수 문자열을 생성하면 오류나 취약점이 발생하기 쉽다는 것입니다.
답변2
를 사용한다고 가정하면 bash
간접 참조를 통해 이 작업을 쉽게 수행할 수 있습니다.
$ foo=bar
$ bar=magicword
$ printf "%s\n" "${!foo}"
magicword
구문 $var
(또는 ${var}
)은 변수의 내용을 생성합니다 var
.
${!var}
변수의 내용을 생성하는 구문의 이름을 따서 명명 var
.