Zsh - 쉘 스크립트에 마지막 매개변수가 전달되었나요?

Zsh - 쉘 스크립트에 마지막 매개변수가 전달되었나요?

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]})가 됩니다.

관련 정보