zsh 쉘의 쉘 스크립트에 마지막 매개변수를 전달하는 방법은 무엇입니까?
$ example.zsh arg1 arg2 ... arglast
last argument is "arglast"
답변1
@
작동 원리는 기본적으로 위치 매개변수 배열을 포함하는 변수와 유사합니다. $@
배열 첨자를 사용할 수 있습니다. 마지막 요소는 인수²의 개수이므로 $#
위치 에 있습니다.$#
printf 'Last argument is "%s"\n' "${@[$#]}"
아니면,배열 첨자, 음수 값은 끝부터 계산되므로 [-1]
마지막 요소를 가져옵니다.
printf 'Last argument is "%s"\n' "$@[-1]"
마지막 매개변수를 얻는 또 다른 방법은 다음을 사용하는 것입니다.P
매개변수 확장 플래그두 가지 매개변수 조회를 수행합니다. 즉, ${(P)foo}
값을 foo
다른 매개변수 이름으로 사용하고 해당 값으로 확장합니다. 이 기능을 사용하세요#
위치 인수의 개수를 포함하는 변수처럼 작동합니다. 그러나 이는 위치 인수가 하나 이상 있는 경우에만 작동하며, 그렇지 않으면 $0
(현재 스크립트의 이름)을 얻게 됩니다. 배열을 사용하면 @
이 문제가 발생하지 않습니다.
printf 'Last argument is "%s"\n' "${(P)#}"
¹ 차이점은 $@
암시적@
매개변수 확장의 플래그, 및 와 같은 여러 단어 로 "$@"
및 을 확장합니다 ."$@[1,3]"
"$array[@]"
"${(@)array[1,3]}"
² Zsh는 위치 매개변수와 배열 요소를 1부터 시작하여 계산합니다.ksh_arrays
호환성 옵션이 켜져 있는 경우 배열 요소는 0부터 계산되기 시작하고 마지막 요소는 ${@[${#}-1]}
)가 됩니다.