linux shell 之 sh与bash区别

#!/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的软链
      [work@zjm-testing-app46 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的特定规范,代码就不会再向下解释了,程序会停止在这里!)

原文地址

发布了55 篇原创文章 · 获赞 17 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/XuHang666/article/details/83270152
今日推荐