我想知道为 dash、ash 和 sh 编写的脚本是否 100% 兼容?
dash 或 ash 是否有任何附加功能或语法更改?
据我所知,ash是sh的直系后代。
答案1
简短的回答是否定的,它们不是 100% 兼容。
但大多数 shell 都非常接近基本的,因此您很少会遇到不一致的情况。事实上,大多数 shell 在添加的语法方面差别不大,但在一些额外的功能(如制表符补全等)方面有所不同。
而且,准确地说,它dash
是 BSD 到 Linux 的后代。ash
它们都应该是 的后代或不同的实现sh
。事实上,在大多数系统上,它只是或其他内容sh
的符号链接。重要的是 POSIX 合规性 — 当您根据标准编写脚本时,就不会遇到问题。bash
dash
这些 shell 之间的区别在于优化和性能。它们的功能不太丰富bash
,但它们是完全合法的 shell。 Bash 具有丰富的交互式工作功能,但会占用更多内存。
答案2
应该提到的是,在某些系统上,特别是 Debian,/bin/灰烬不可用:
$ type ash dash
bash: type: ash: not found
dash is /bin/dash