linux shell 之 sh与bash区别
程序员文章站
2022-03-10 22:09:20
...
#!/bin/sh & #!/bin/bash区别
在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本。
(1) #!/bin/sh
(2) #!/bin/bash
二者区别如下:
1.新建test.sh脚本内容如下:
#!/bin/sh
source pcy.sh #pcy.sh并不存在
echo hello
执行./test.sh,屏幕输出为:
./test.sh: line 2: pcy.sh: No such file or directory
因此可以得知,在#!/bin/sh的情况下,source不成功,不会运行source后面的代码。
修改test.sh脚本的第一行如下:
#!/bin/bash
source pcy.sh #pcy.sh并不存在
echo hello
再次执行./test.sh,屏幕输出为:
./test.sh: line 2: pcy.sh: No such file or directory
hello
原因:
1. sh一般设成bash的软链
[[email protected] cy]$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Nov 13 2006 /bin/sh -> bash
2. 在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式
3. 也就是说 /bin/sh 相当于 /bin/bash --posix
所以,sh跟bash的区别,实际上就是bash有没有开启posix模式的区别
假如第一行写成 #!/bin/bash --posix,执行效果跟#!/bin/sh是一样的(遵循posix的特定规范,代码就不会再向下解释了,程序会停止在这里!)
推荐阅读