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$-$?

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

답변2

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

4.23 변수 할당

쉘 명령 언어에서 다음 부분으로 구성된 단어입니다.

변수 이름=값

특수 매개변수 $@$*일부 쉘 내장 수단을 수정할 수 있지만 실제로 이에 대한 할당을 작성할 수는 없습니다. *=string그렇게 훈련받지 않은 눈에도 글을 쓰는 것이 실제로 매우 부자연스러워 보일 것이기 때문에 그것들은 현명하게 선택되었다고 말하고 싶습니다 .

관련 정보