Em
. path/to/script at least one argument
Como outros já disseram, dependendo do shell, esses argumentos extras são ignorados (Bourne, Almquist) ou substituem o conjunto atual de parâmetros posicionais ( $@
, $1
, $2
...) para o interpretação desse script (a maioria dos outros shells). POSIX não especifica o comportamento quando argumentos extras são passados para .
. Nesse caso, também há alguma variação entre os shells quanto a se qualquer alteração nos parâmetros posicionais (como com set a b
) feita dentro do script permanecerá depois que .
terminar.
Em:
. path/to/script
no entanto, o comportamento é especificado. Os parâmetros posicionais são necessários não para serem afetados, portanto, permanecerá o mesmo de antes para a interpretação do script.
Se você quiser que os parâmetros posicionais sejam uma lista vazia durante a interpretação desse script, será necessário redefini-lo antes ou use uma função:
set -- # or shift "$#"
. path/to/script
(embora os parâmetros posicionais sejam perdidos). Ou use uma função:
dot() { file=$1; shift; . "$file"; }
dot path/to/myscript
No momento em que o comando .
é executado, os parâmetros posicionais serão os da função. Após o shift
, serão os argumentos passados para a função menos o primeiro, portanto, no acima, uma lista vazia; mas isso significa que com essa função você pode portavelmente passar uma lista arbitrária de parâmetros posicionais para o script originado como em:
dot path/to/myscript extra args
Onde os extra
args
estarão disponíveis como $1
e $2
no script de origem.
E se myscript
chamar set
para modificar a lista de parâmetros posicionais, isso afetará apenas os parâmetros posicionais da função, e essas alterações não persistirão depois que a função retornar.