IT TIP

간접 확장이란 무엇입니까?

itqueen 2020. 11. 1. 19:04
반응형

간접 확장이란 무엇입니까? $ {! var *}는 무엇을 의미합니까?


" 초보자를위한 Bash 가이드 "를 읽고 있습니다. 그것은 말한다 :

의 첫 문자 PARAMETER가 느낌표 인 경우 Bash는 나머지에서 형성된 변수의 값을 변수 PARAMETER이름으로 사용합니다. 그런 다음이 변수가 확장되고 해당 값이 PARAMETER자체 값이 아닌 나머지 대체에서 사용 됩니다. 이를 간접 확장이라고합니다.

주어진 예는 다음과 같습니다.

franky ~> echo ${!N*}
NNTPPORT NNTPSERVER NPX_PLUGIN_PATH

나는 여기서 잘 이해하지 못한다.

나머지에서 형성된 변수의 값 PARAMETER

PARAMETER그냥 !N*다음

나머지 PARAMETER

입니다 N*. 이것이 어떻게 변수를 형성 할 수 있습니까? Bash가 가능한 모든 명령을 검색 했습니까?


bash매뉴얼 페이지 를 읽으면 기본적으로 진술 한 내용을 확인합니다.

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

그러나 거기에서 읽기 :

이에 대한 예외 는 아래 의 확장 ${!prefix*}${!name[@]}설명입니다.

${!prefix*}접두사와 일치하는 이름입니다. 이름이 접두사로 시작하고 IFS특수 변수 의 첫 문자로 구분 된 변수 이름으로 확장됩니다 .

즉, 특정 예 ${!N*}인용 한 규칙에 대한 예외 입니다. 그것은 않습니다 , 그러나, 작업 등 예상되는 경우에 광고로 :

$ export xyzzy=plugh ; export plugh=cave

$ echo ${xyzzy}  # normal, xyzzy to plugh
plugh

$ echo ${!xyzzy} # indirection, xyzzy to plugh to cave
cave

*여기 에서처럼 주어진 "간접" 이로 끝나는 경우 예외가있는 것 같습니다. 이 경우 지정한 부분 ( N여기)으로 시작하는 모든 변수 이름을 제공합니다 . Bash는 변수를 추적하고 어떤 것이 존재하는지 알고 있기 때문에 그렇게 할 수 있습니다.

진정한 간접는 이것이다 :
말 나는 변수가 $VARIABLE로 설정을 42하고, 나는 또 다른 변수가 $NAME로 설정을 VARIABLE. ${!NAME}나에게 줄 것이다 42. 한 변수의 값을 사용하여 다른 변수의 이름을 알려줍니다.

$ NAME="VARIABLE"
$ VARIABLE=42
$ echo ${!NAME}
42

예,! 다음에 가능한 모든 변수 확장을 검색합니다. 수행 한 경우 :

echo ${!NP*}

당신은 얻을 것 NPX_PLUGIN_PATH입니다.

다음 예를 고려하십시오.

:~> export myVar="hi"
:~> echo ${!my*}
    myVar
:~> export ${!my*}="bye"
:~> echo $myVar
    bye

간접 처리에서 예외가 발생했습니다. 마지막 문자가 *이면 이전에 주어진 접두사가있는 모든 변수가 반환됩니다.


권위있는 정보는 bash에 대한이 GNU 문서를 참조 할 수 있습니다.

https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion

그러나 기본적으로 간접 확장은 ${!prefix*}예외 중 하나로 수행되지 않습니다 . 귀하의 예에서 N은 접두사입니다.

문서는 bash에서 간접 확장이 무엇인지 설명합니다.

참고 URL : https://stackoverflow.com/questions/8515411/what-is-indirect-expansion-what-does-var-mean

반응형