Shell-Script
Zsh - 傳遞給 Shell 腳本的最後一個參數?
如何將最後一個參數傳遞給 zsh shell 中的 shell 腳本?
$ example.zsh arg1 arg2 ... arglast last argument is "arglast"
@
主要像包含位置參數數組的變數一樣工作¹:$@
可以採用數組下標。最後一個元素在位置$#
,因為$#
是參數的數量²。printf 'Last argument is "%s"\n' "${@[$#]}"
或者,在數組 subscript中,負值從末尾開始計數,因此
[-1]
取最後一個元素。printf 'Last argument is "%s"\n' "$@[-1]"
獲取最後一個參數的另一種方法是使用
P
參數擴展標誌,它會進行兩次參數查找:${(P)foo}
將 的值foo
作為另一個參數名稱並擴展為該值。使用#
它就像一個包含位置參數數量的變數一樣工作。但是請注意,這僅在至少有一個位置參數時才有效,否則您會得到$0
(目前腳本的名稱)。使用@
數組沒有這個問題。printf 'Last argument is "%s"\n' "${(P)#}"
¹不同之處在於參數擴展中
$@
有一個隱含的@
標誌,因此"$@"
並"$@[1,3]"
擴展為多個單詞,例如"$array[@]"
and"${(@)array[1,3]}"
。² Zsh 從 1 開始計算位置參數和數組元素(除非打開
ksh_arrays
兼容性選項,在這種情況下,數組元素從 0 開始計數,最後一個元素為${@[${#}-1]}
)。