Como evitar que “source” em um script bash passe os argumentos do script?

2

Essas perguntas abordam a funcionalidade de source : o que é a diferença? entre a execução de um script Bash vs sourcing? O que 'source' faz?

mas estou confuso sobre por que chamar source em um script passa os argumentos do script. Por exemplo. Eu tenho esses dois scripts:

caller.sh

source sourced.sh
source sourced.sh ""

sourced.sh

echo [$*]

Quando faço

./caller.sh arg1 arg2

Eu obtenho

[arg1 arg2]
[]

"arg1 arg2" são passados para sourced.sh mesmo que eu não tenha especificado source sourced.sh $* .

Por quê?

Eu descobri que acrescentar "" impede que os argumentos sejam passados. Essa é a maneira recomendada de evitar que os argumentos sejam passados?

    
por Gnubie 21.01.2016 / 13:13

1 resposta

4

source permite que você execute um comando no contexto atual (os argumentos $* são parte do contexto ).

A segunda chamada source substitui esses argumentos. Note que ele os sobrescreve apenas para a chamada, eles são restaurados logo depois.

    
por 21.01.2016 / 13:43