sh和bash的区别

sh 名称:bourne shell               [bɔ:n]

bash 名称:bourne-again shell

sh 是 bash的子集,bash是sh的进一步扩展。在linux中sh是bash的一个软连接。

[root@localhost /]# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Nov 20 05:56 /bin/sh -> bash

 /bin/sh 相当于 /bin/bash --posix,因为sh和bash的区别就在于POSIX标准模式和bash特性的差异,执行sh命令,就相当于bash 加上 --posix 参数执行命令一样。

POSIX介绍:
POSIX表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。

[bɔ:n]
### 关于 `.sh` `.bash` 文件的区别及用途 `.sh` `.bash` 都是用来表示脚本文件的扩展名,它们的主要区别在于所使用的解释器以及兼容性特定功能的支持。 #### 解释器的选择 - **`.sh` 文件** 这种类型的文件通常由 POSIX 标准定义的 `sh` 解释器来解析。尽管现代系统上 `/bin/sh` 很可能指向的是 Bash 或其他更高级的 shell 实现,但从理论上讲,它应该遵循 POSIX 标准[^1]。 - **`.bash` 文件** 此类文件明确指定使用 Bash 解释器 (`/bin/bash`) 来执行脚本。Bash 是一种增强型的 shell,支持更多特性,比如数组、复杂字符串操作改进的条件测试等功能[^3]。 #### 脚本头部声明 (Shebang) 为了确保脚本能够按照预期方式运行,在创建这些脚本时需要在首行加入 shebang 行: 对于 `.sh` 文件: ```bash #!/bin/sh echo "This is a sh script" ``` 而对于 `.bash` 文件,则应写成如下形式: ```bash #!/bin/bash echo "This is a bash script with advanced features like arrays." declare -a myArray=("element1" "element2") # Array declaration only available in bash. for i in "${myArray[@]}"; do echo "$i" done ``` 上述例子展示了如何利用仅限于 Bash 的特性——数组处理[^4]。 #### 可移植性与兼容性考虑 由于历史原因,某些老旧 Unix 系统上的默认 shell 并不是 Bash ,而是原始版本或者其它实现的 Bourne Shell 。因此如果希望编写具有广泛适用性的脚本,最好采用 `.sh` 后缀并严格遵守 POSIX 规范[^2]。然而,在绝大多数当代 Linux 发行版中,默认安装的就是 GNU Bash ,所以开发人员往往倾向于充分利用其额外的功能而选用 `.bash` 结尾命名自己的脚本文件[^5]。 #### 总结 虽然技术层面上二者并无绝对界限,但习惯上会依据实际需求选择合适的后缀名以便清晰表达意图。当追求最大化的跨平台适应能力时推荐使用 `.sh`; 如果项目允许依赖具体环境并且确实需要用到那些专属特有属性的话则可以选择 `.bash`.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值