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]}
)になります。