web-dev-qa-db-ja.com

bashスクリプトの「ソース」がスクリプトの引数を渡さないようにするにはどうすればよいですか?

これらの質問は、sourceの機能に対処します: Bashスクリプトの実行とソースの違いは何ですか?'source'は何をしますか?

しかし、スクリプトでsourceを呼び出すと、スクリプトの引数が渡される理由については混乱しています。例えば。私はこれらの2つのスクリプトを持っています:

caller.sh

source sourced.sh
source sourced.sh ""

sourced.sh

echo [$*]

私がする時

./caller.sh arg1 arg2

私は得る

[arg1 arg2]
[]

source sourced.sh $*を指定しなかった場合でも、「arg1arg2」がsourced.shに渡されます。

どうして?

「」を追加すると、引数が渡されないことがわかりました。これは、引数が渡されないようにするための推奨される方法ですか?

6
Gnubie

sourceを使用すると、 現在のコンテキスト (引数$* are コンテキストの一部 )。

2番目のsource呼び出しは、これらの引数を上書きします。呼び出しのためだけにそれらを上書きすることに注意してください、それらは直後に復元されます。

5
Amessihel