
Bash 매뉴얼 페이지에서는 nameref가 아닌 매개변수의 간접 확장이 다음과 같이 설명됩니다.
매개변수의 첫 번째 문자가 느낌표(!)이고 매개변수가 nameref가 아닌 경우 간접 참조 수준이 도입됩니다. Bash는 나머지 인수를 확장하여 형성된 값을 새 인수로 사용하고 해당 값은 원래 인수의 확장이 아닌 나머지 확장에 사용됩니다. 이를 간접 확장이라고 합니다. 값은 물결표 확장, 매개변수 확장, 명령 대체 및 산술 확장을 거칠 수 있습니다.
하지만 마지막 문장을 재현할 수 없습니다.
settings x=y
, 결과는 예상대로입니다 y=z
.z=end
$ echo ${!x}
z
설정 x=y
및 .y='$z'
z=end
$ echo ${!x}
$z
설정 x='$y'
, y=z
및 z=end
.
$ echo ${!x}
-bash: $y: invalid variable name
그렇다면 문서에서 위에서 언급한 확장 주제의 가치는 무엇입니까? 내가 무엇을 놓치고 있나요?
(사용된 Bash 버전은 5.1.0(1)-릴리스(x86_64-redhat-linux-gnu)입니다.)
답변1
이는 문서 오류인 것 같습니다. 이것이 텍스트를 소개한 커밋반대 방향:
CWRU/CWRU.log
소스 배포판에서 관련 추가 사항을 인용하면 다음과 같습니다.
+ 12/18
+ -----
+subst.c
+ - parameter_brace_find_indir: when expanding the indirect parameter
+ to find the eventual variable name, we don't perform word splitting.
+ Make sure this does the right thing for * and @. Fixes bug
+ reported by isabella parakiss <[email protected]>
+
+ 12/19
+ -----
+doc/{bash.1,bashref.texi}
+ - indirect expansion: make sure to note that the value of the indirect
+ variable does not undergo word splitting as one of its expansions,
+ as in fix from 12/18
텍스트가 누락되었을 수 있습니다.아니요:그 가치는아니요주제....