如何防止 bash 脚本中的“源”传递脚本的参数?

Gnu*_*bie 9 script bash shell command-line

这些问题解决了以下功能source执行 Bash 脚本与获取它有什么区别? “源”有什么作用?

但我很困惑为什么source在脚本中调用会传递脚本的参数。例如我有这两个脚本:

调用者.sh

source sourced.sh
source sourced.sh ""
Run Code Online (Sandbox Code Playgroud)

来源.sh

echo [$*]
Run Code Online (Sandbox Code Playgroud)

当我做

./caller.sh arg1 arg2
Run Code Online (Sandbox Code Playgroud)

我得到

[arg1 arg2]
[]
Run Code Online (Sandbox Code Playgroud)

“arg1 arg2”被传递给 sourced.sh 即使我没有指定source sourced.sh $*.

为什么?

我发现附加 "" 会阻止传递参数。这是防止传递参数的推荐方法吗?

小智 5

source允许您在当前上下文中执行命令(参数$*context 的一部分)。

第二个source调用覆盖了这些参数。请注意,它仅在通话时覆盖它们,之后它们会立即恢复。