私は... && add-arg 'something'
ができるのが好きで、逆のshift
のように、位置引数に「何か」を追加します。
... && set "$@ something"
を試しましたが、set "$@ something"
(条件なし)を実行するだけで正しく機能するように見えましたが、これは機能しませんでした。
具体的には、zsh
を使用すると、さらに @ Kusalanandaで示される標準のset -- "$@" ...
に 、位置パラメーターは$argv
配列(cshのように)からも利用できます。 、次のこともできます。
argv+=arg # append one argument to the end
argv+=(arg2 arg3) # append several arguments
argv[1,0]=(arg1 arg2) # insert in front
argv[3,0]=(x) # insert before the 3rd element
2+=(x) # same as above (insert after the 2nd)
2+=x # append x to the second argument (not to confuse with
# the above).
argv[2,5]=(y) # replace 4 elements 2 to 5 with one y argument
argv[3,-1]=() # truncate
1=() # same as "shift"
POSIXシェルでは、
set -- "$@" "value"
位置パラメータのリストの最後にvalue
を追加し(実際にはリストを新しい長いリストに置き換えます)、
set -- "value" "$@"
最初に追加します(技術的には、shift
が最初の要素を削除するため、shift
の逆になります)。これはzsh
にも当てはまります。
--
は、次の値が-
で始まる場合に、誤ってオプションとして解釈されないようにするために使用されます。
特別な変数$@
はほとんど排他的に"$@"
として使用されます。これは、個別に引用された各位置パラメーターの値に拡張されるためです。式"$@ somethingelse"
は、個別に引用された位置パラメータのリストに展開され、最後に<space>somethingelse
が追加されます。
位置パラメータの値をスペースで区切られた単一の文字列(または$IFS
の最初の文字が何であれ)として使用するには、"$*"
("$* somethingelse"
単一の文字列として明確に定義されています)。ただし、これはnot値のリストを単一の値に折りたたむため、このインスタンスで実行したいことです。