環境
macOS Catalina 10.15.7
Raspbian 10.3
実行するシェルスクリプト
# !/bin/sh
echo {0..10}
# !/bin/bash
echo {0..10}
Mac上で実行
$ chmod +x test_sh.sh
$ chmod +x test_bash.sh
実行権限を与える。それぞれ実行すると、
$ ./test_sh.sh
0 1 2 3 4 5 6 7 8 9 10
$ ./test_bash.sh
0 1 2 3 4 5 6 7 8 9 10
shでもbashでも同じ結果が得られる。
/bin/shのシンボリックリンクを調べてみる。
$ ls -l /bin/sh
-rwxr-xr-x 1 root wheel 31440 9 22 2020 /bin/sh
bashにリンクしているわけでない
$ /bin/sh --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.
$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.
/bin/sh --versionと/bin/bash --versionは同じ内容が返ってくる。
Macではshとbashはほぼ同じもの。違いがあるとしたら、
set -o
$ sh check_option.sh | grep posix
posix on
$ bash check_option.sh | grep posix
posix off
posixと言うオプションがbashではoffでshだとonになっている点。
Raspberry Pi
$ chmod +x test_sh.sh
$ chmod +x test_bash.sh
実行権限を与える。それぞれ実行すると、
$ ./test_sh.sh
{0..10}
$ ./test_bash.sh
0 1 2 3 4 5 6 7 8 9 10
shとbashで得られる結果が異なる。
/bin/shのシンボリックリンクを調べてみる。
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2月 14 2020 /bin/sh -> dash
dashにリンクしている。
「Ubuntuの/bin/shはbashではなくdash」によると、
ubuntu の /bin/sh は Almquist shell (ash) から派生したシェル Debian Almquist shell(dash) へのシンボリックリンクになっており、bash で OK な( … ) のシンタックスを dash は対応していないから。
Raspbianはubuntuと同様に/bin/shがdashである。そのため、/bin/shをbash感覚で使っていると、bashのシンタックスが使えないことがあるらしい。
まとめ
- macOSでは
shとbashはほぼ同じもの、結果としてshとbashの実行結果が一致した。 - Raspbianでは
shとdashにシンボリックリンクが張られている。bashのシンタックス(ブレース展開{1..10})がdashでは対応していなかったため、結果としてshとbashの実行結果が異なった。