ECHO 변수에 대한 Linux ECHO 출력

ECHO 변수에 대한 Linux ECHO 출력

var반환 값이 VAR1( $var값 있음 )인 변수 ( )가 있습니다 VAR1. 정의된 입력 파일이 있습니다 VAR1( VAR1=ABCDEF).

echo값을 얻으 려면 어떻게 사용합니까 ?ABCDEF$var

다른 많은 옵션을 시도했지만 항상 출력이 or echo $(echo $var)로 나오지만 절대 그렇지 않습니다 . 나는 그것을 선언된 파일에서 사용했고 , 명령 프롬프트에서 사용해 보았습니다.VAR1echo VAR1ABCDEFsourceVAR1

답변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.

관련 정보