破折号,灰烬和sh脚本是否100%兼容?


16

我想知道为破折号,灰烬和sh编写的脚本是否100%兼容?

破折号,灰分或语法有没有增加的功能?

据我所知,灰烬是sh的直接后代。


灰是庆典的条纹下来形式

4
资源?我什么也没说灰与bash有关
user1115057 2012年

人们为什么不将补丁提交给bash而不是创建各种shell,这总是让我感到困惑。如果您真的想知道,请阅读手册,例如man ash
雏菊2012年

2
正确,它不是bash的后代。说它们是sh(原始的Bourne壳)的后代会更精确,但这也不完全正确。
Zlatko

您可以使用该实用工具checkbashisms来测试您的脚本是否符合POSIX。
donothing成功地

Answers:


18

简短的答案是不,它们不是100%兼容的。

但是大多数外壳都非常接近基本外壳,因此您很少会遇到不一致的情况。实际上,大多数外壳程序在添加语法方面并没有太大区别,但是在某些额外的功能(例如制表符完成和类似功能)上却相差无几。

而且,确切地说,是BSD到Linux dash的后代ash。并且它们都应该是的后代或不同的实现sh。实际上,sh在大多数系统上,它只是与bashdash或别的东西。重要的是POSIX的合规性-当您按照标准编写脚本时,不会遇到问题。

这些外壳之间的区别在于优化和性能。它们的功能还不如bash,但是它们是完全合法的外壳。Bash具有丰富的功能,可以进行交互式工作,但是使用更多的内存。


但是对于脚本用法,它们是兼容的吗?
user1115057'8

关于POSIX合规性,即使我遵循该标准,即使脚本是为Bash编写的,我也不认为它将在任何sh或其后代上运行
user1115057 2012年

如果您不使用一些晦涩的功能,它们应该彼此兼容。但是,如果使用bash脚本,则可能会遇到更多麻烦。
Zlatko

决不打算将bash与sh或ash或dash一起使用。那些不起眼的功能是什么?
user1115057'8

1
bash的许多新功能是POSIX的新增功能,因此,如果使用它们,您将越来越有可能编写不可移植的代码。IIRC甚至[[]]构造都不在sh中。还要注意,如果您不编写纯shell脚本,那么工具的差异也会发挥作用(不同版本的sed,grep,awk ...)。
lynxlynxlynx

1

应该提到的是,在某些系统(尤其是Debian)上,/ bin / ash不可用:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash

2
他们可能有忙碌的烟灰。
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.