Bash:使用dot或"source"调用另一个脚本 - 有什么区别?

set*_*voy 49 bash

我们举一些例子:

$ cat source.sh
#!/bin/bash
echo "I'm file source-1"

. source-2.sh
Run Code Online (Sandbox Code Playgroud)

和:

$ cat source-2.sh
#!/bin/bash
echo "I'm file source-2"
Run Code Online (Sandbox Code Playgroud)

现在运行:

$ ./source.sh
I'm file source-1
I'm file source-2
Run Code Online (Sandbox Code Playgroud)

如果我先改变第二个文件的调用:

$ cat source.sh
#!/bin/bash
echo "I'm file source-1"

source source-2.sh
Run Code Online (Sandbox Code Playgroud)

它会产生与使用相同的影响dot.

那么 - 这种方法有什么区别?谢谢.

che*_*ner 50

唯一的区别在于便携性..是用于从文件执行命令的POSIX标准命令; source是一个更易读的同义词,由bash一些其他shell提供.bash然而,它本身并没有区分这两者.

  • 是我一个人还是在“bash --version”“GNU bash,版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)”中使用“source”会产生与奇怪的“.”不同的行为情况(例如从函数中执行此操作)。-- 我的经验是 `source` 导出变量比 `.` 更可靠 -- (另外,当通过 `declare -f` 重新读取代码时,bash 将 `.` 与 `source` 区分开来) (3认同)

dev*_*ull 48

没有区别.

手册:

source

source filename

A synonym for . (see Bourne Shell Builtins).
Run Code Online (Sandbox Code Playgroud)

  • 嗯,并不是说没有区别。例如,点更短!:^) (8认同)
  • 如果我们在谈论人体工程学,那么点的可读性要差得多,新手也更难搜索 (2认同)