bash 中的 BASH_SOURCE

这个变量表示 bash 真正的入口程序。这个变量的必要性体现在 source 某个 bash 脚本的时候 $0 不能准确反映入口程序。

#!/bin/bash
echo "[$0] vs. [${BASH_SOURCE[0]}]"
$ bash ./foo
[./foo] vs. [./foo]

$ ./foo
[./foo] vs. [./foo]

$ . ./foo
[bash] vs. [./foo]

参考 https://stackoverflow.com/a/35006505/

本来 BASH_SOURCE 是一个数组类型的变量。但是 bash 中使用 $ARR 相当于 ${ARR[0]},所以也可以简写。