Eu gosto de poder ... && add-arg 'something'
e ter 'algo' sendo adicionado aos argumentos posicionais, como um inverso shift
.
Eu tentei ... && set "$@ something"
, mas isso não funcionou, embora apenas fazendo set "$@ something"
(sem a condição) parecesse funcionar corretamente.
Em qualquer shell POSIX,
adicionaria
value
ao final da lista de parâmetros posicionais (na verdade, substituiria a lista por uma nova lista mais longa) eiria adicioná-lo no início (e seria tecnicamente o inverso de a
shift
comoshift
remove o primeiro elemento). Isso vale parazsh
.O
--
é usado para proteger os seguintes valores de serem acidentalmente interpretados como opções, caso comecem com-
.A variável especial
$@
é usada quase exclusivamente,"$@"
pois isso se expandiria para o valor de cada parâmetro posicional cotado individualmente. A expressão"$@ somethingelse"
se expandiria para a lista de parâmetros posicionais citados individualmente, com<space>somethingelse
anexado ao último deles.Para usar os valores dos parâmetros posicionais como uma única string delimitada por espaços (ou qualquer que seja o primeiro caractere de
$IFS
), use"$*"
("$* somethingelse"
é bem definido como uma única string). No entanto, isso não é o que você deseja fazer neste caso, pois reduziria sua lista de valores para um único valor.Com
zsh
especificamente, além do padrãoset -- "$@" ...
mostrado por @Kusalananda , os parâmetros posicionais também estão disponíveis via$argv
array (como em csh), então você também pode fazer: