Bash 매뉴얼 페이지에 특수 매개변수가 "인용만 가능하며 할당은 허용되지 않습니다"라고 나와 있는 이유는 무엇입니까?

Bash 매뉴얼 페이지에 특수 매개변수가 "인용만 가능하며 할당은 허용되지 않습니다"라고 나와 있는 이유는 무엇입니까?

man bash내용은 다음과 같습니다.

Special Parameters
       The shell treats several parameters specially.
       These parameters may only be referenced; assignment to them is not allowed.

글쎄, shift변화 @하고 *(물론 같은 방식으로). 실제로 set -- one two three내가 원하는 것을 할당 @하고 *.

그렇다면 제가 man페이지에 있는 내용을 오해하고 있는 걸까요?

답변1

특수 매개변수에는 할당할 수 없습니다. 할당 연산자( 1=foo, @=(foo bar), ?=0, ...) 를 사용할 수 없습니다 . 할당 매개변수( ${1=foo}, ...) 를 사용하여 구성을 확장할 수 없습니다 .

물론 수정할 수 있지만 set(옵션이 아닌 인수 사용) 또는 shift내장 함수를 사용하여 위치 인수를 설정하고, $#( set옵션 사용) 수정하고 $-, set 명령을 실행하는 등 할당 이외의 간접적인 방법을 사용해야 합니다 $?. 등.

예외적으로, _일반적으로 고정되지는 않지만 실제로 에 할당할 수 있습니다( 빈 문자열 로 및 로 _=foo a=$_설정 ).afoo_

답변2

질문의 핵심은 작업이 무엇인지입니다. man bash분명히 정의되어 있지는 않지만POSIX 사양에 단어가 있습니다.:

4.23 변수 할당

쉘 명령 언어의 단어는 다음 부분으로 구성됩니다.

변수 이름 = 값

일부 쉘 내장 기능을 통해 특수 매개변수를 수정할 수 있지만 실제로 $@할당을 작성할 수는 없습니다. 훈련받지 않은 사람의 눈에도 $*글이 매우 부자연스러워 보이기 때문에 현명하게 선택했다고 말하고 싶습니다.*=string

관련 정보