执行像 A 这样的 Bash 脚本和采购像 B 这样的 Bash 脚本有什么区别?
A
> ./myscript
B
> source myscript
Run Code Online (Sandbox Code Playgroud) 当我输入一个例如。在我的.bashrc文件中添加了一个新别名我无法立即在该终端窗口中使用它,直到最近我认为我必须重新启动终端才能重新加载.bashrc文件。然后我在某处发现如果我写
. .bashrc
Run Code Online (Sandbox Code Playgroud)
这将.bashrc在当前窗口中重新加载文件,我不必重新启动。这对鳍有效,但实际发生了什么?为什么这会重新加载.bashrc文件?
这些问题解决了以下功能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 $*.
为什么?
我发现附加 "" 会阻止传递参数。这是防止传递参数的推荐方法吗?