シェルスクリプト

$0と$BASH_SOURCEの違い

スクリプトを準備

$ cat << 'EOF' > test
> echo $0
> echo $BASH_SOURCE
> echo ${BASH_SOURCE:-$0}
> EOF
$ chmod 777 test

実行してみる

$ ./test
./test
./test
./test
$ bash ./test
./test
./test
./test
$ source ./test
-bash
./test
./test
$ zsh test
./test

./test

sourceで実行されても、bashでもzshで実行されてもうまく実行ファイルのパスを取得するためには、BASH_SOURCE:-$0と書くべき
実行ファイルのディレクトリの絶対パスを取得するにはecho $(cd $(dirname ${BASH_SOURCE:-$0}); pwd)でいける