source命令是从 C shell 而来,是bash shell的内置命令,点命令是从Bourne shell而来,是source的别名。在使用效果上,点命令等同于source命令。
source和点命令在引入其它shell文件时,会将该shell脚本文件中定义的变量和函数也一并引入到当前入口脚本环境中,相当于合并shell文件执行,外部shell脚本执行的结果也会反应到当前入口脚本中;而路径引入方式不同,会开启子shell来运行外部脚本,执行的结果也不会反映到当前入口脚本中。
测试案例:
a.sh:
#!/usr/bin/env bash
var_a='a'
echo '执行a.sh'
b.sh:
#!/usr/bin/env bash
function test_b () {
echo 'b'
}
echo '执行b.sh'
我们设定这三个shell文件在同一目录下,入口shell文件为init.sh:
(1)、测试路径引入方式的效果
#!/usr/bin/env bash
./a.sh # '执行a.sh'
./b.sh # '执行b.sh'
echo $var_a # 无输出,空
test_b # 报错,test_b: 未找到命令
(2) 、使用source和点命令引入方式的效果
#!/usr/bin/env bash
. ./a.sh # '执行a.sh'
source ./b.sh # '执行b.sh'
echo $var_a # 输出 'a'
test_b # 输出 'b'
对于结果,可以得知source(或点命令) 引入外部shell文件的方式,可以访问外部shell文件中定义的变量和函数,而路径引入方式则不行;两种引入外部shell文件的共同之处是都会执行外部shell文件中的定义的脚本命令。