#!/bin/bash和#!/bin/sh的区别

#! 是个指示路径的表示符,/bin/bash和/bin/sh指定了脚本解析器的程序路径

简单地说,bash是sh的完整版,bash完全兼容sh命令,反之不行

执行man bash、man sh得到官方解释如下:
bash 是一个与 sh 兼容的命令解释程序,可以执行从标准输入或者文件中读取的命令。

我发现并且bash和sh的解释是完全一样的, 看来从手册上得不到解释。
通过查阅资料得知bash和sh的区别:

SH:

sh就是Bourne shell
这个是UNIX标准的默认shell,对它评价是concise简洁 compact紧凑 fast高效,由AT&T编写,属于系统管理shell

BASH:

bash是 GNU Bourne-Again SHell (GNU 命令解释程序 “Bourne二世”)
是linux标准的默认shell ,它基于Bourne shell,吸收了C shell和Korn shell的一些特性。bash是Bourne shell的超集,bash完全兼容Bourne shell,也就是说用Bourne shell的脚本不加修改可以在bash中执行,反过来却不行,bash的脚本在sh上运行容易报语法错误。

为什么会出现sh:

鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并更名为dash (Debian Almquist Shell),并建议将/bin/sh指向它,以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。
Debian曾经采用/bin/bash更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度,但是后来经过shell脚本测试存在运行问题。因为原先在bash shell下可以运行的shell script (shell 脚本),在/bin/sh下还是会出现一些意想不到的问题,不是100%的兼用。

其他:

除了bash和bin,还有/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,/bin/echo等

shell:

shell即shell script, 是一种程序设计语言,也是一种命令语言

《#!/bin/bash和#!/bin/sh的区别》 1.jpg

bash是sh的超集

参考:
https://blog.csdn.net/tq384998430/article/details/65445797
https://blog.csdn.net/u010486679/article/details/78534841

    原文作者:LLBRH
    原文地址: https://www.jianshu.com/p/070bd0b4855f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞