欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的特定规范,代码就不会再向下解释了,程序会停止在这里!)

原文地址

相关标签: shell