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