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=$_
설정 ).a
foo
_
답변2
질문의 핵심은 작업이 무엇인지입니다. man bash
분명히 정의되어 있지는 않지만POSIX 사양에 단어가 있습니다.:
4.23 변수 할당
쉘 명령 언어의 단어는 다음 부분으로 구성됩니다.
변수 이름 = 값
일부 쉘 내장 기능을 통해 특수 매개변수를 수정할 수 있지만 실제로 $@
할당을 작성할 수는 없습니다. 훈련받지 않은 사람의 눈에도 $*
글이 매우 부자연스러워 보이기 때문에 현명하게 선택했다고 말하고 싶습니다.*=string