Shell-Script

Zsh - 傳遞給 Shell 腳本的最後一個參數?

  • June 19, 2020

如何將最後一個參數傳遞給 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]})。

引用自:https://unix.stackexchange.com/questions/593747