... && add-arg 'something'
나는 역과 같은 위치 매개변수에 "무언가"를 추가할 수 있기를 원합니다 shift
.
나는 그것을 시도했지만 ... && set "$@ something"
그것은 작동하지 않습니다. 비록 set "$@ something"
조건 없이 단지 그것을 하는 것만으로도 잘 작동하는 것 같습니다.
답변1
모든 POSIX 쉘에서,
set -- "$@" "value"
value
위치 인수 목록의 끝에 추가됩니다 (실제로 목록을 새롭고 긴 목록으로 대체합니다).
set -- "value" "$@"
처음에 추가합니다(기술적으로는 첫 번째 요소가 제거되므로 shift
a 와 반대입니다 ). shift
이는 에 적용됩니다 zsh
.
--
다음 값이 로 시작하는 경우 실수로 옵션으로 해석되는 것을 방지하는 데 사용됩니다 -
.
특수 변수는 개별적으로 참조되는 각 위치 인수의 값으로 확장되므로 $@
거의 독점적으로 사용됩니다 . "$@"
표현식은 "$@ somethingelse"
개별적으로 인용된 위치 인수 목록으로 확장되어 <space>somethingelse
마지막 인수에 추가됩니다.
위치 매개변수의 값을 다음과 같이 사용합니다.단일 문자열공백(또는 첫 번째 문자 $IFS
) 으로 구분하여 "$*"
( "$* somethingelse"
단일 문자열로 잘 정의됨)을 사용하세요. 그러나 이것은아니요이 경우 당신이 원하는 것은 값 목록을 단일 값으로 축소하는 것입니다.
답변2
구체적 zsh
으로 추가적으로set -- "$@" ...
@Kusalananda가 표시한 기준을 충족합니다., 위치 매개변수는 배열을 통해서도 사용할 수 있으므로 $argv
(csh에서와 마찬가지로) 다음과 같이 할 수도 있습니다.
argv+=arg # append one argument to the end
argv+=(arg2 arg3) # append several arguments
argv[1,0]=(arg1 arg2) # insert in front
argv[3,0]=(x) # insert before the 3rd element
2+=(x) # same as above (insert after the 2nd)
2+=x # append x to the second argument (not to confuse with
# the above).
argv[2,5]=(y) # replace 4 elements 2 to 5 with one y argument
argv[3,-1]=() # truncate
1=() # same as "shift"