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パラメータ拡張フラグ2つのパラメータ検索を実行します。つまり、${(P)foo}値をfoo別のパラメーター名として使用し、その値に拡張します。この機能を使用してください#位置引数の数を含む変数のように動作します。ただし、これは1つ以上の位置引数がある場合にのみ機能します。そうしないと$0(現在のスクリプトの名前)が得られます。配列を使用すると、@この問題は発生しません。

printf 'Last argument is "%s"\n' "${(P)#}"

¹違いは$@暗黙的@パラメータ拡張のフラグ、などの複数の単語に"$@"展開します。"$@[1,3]""$array[@]""${(@)array[1,3]}"
²Zshは、位置パラメータと配列要素を1から始めて計算します。ksh_arrays互換性オプションがオンの場合、配列要素は0から計算され始め、最後の要素は${@[${#}-1]})になります。

関連情報