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.