作为sh
兼容是不是本身就是一个目标.您遇到了哪些问题需要您的脚本使用sh
?根据您的推理,不同的选项可能也可能不够.如果你只是需要你的脚本在大多数现代环境中运行,那么使用它bash
应该是完全正常的,并且实际上可能比使用更好sh
,因为sh
映射到不同平台上的不同shell.在大多数现代环境中,它实际上并不是它自己的二进制文件,而只是bash
在POSIX兼容模式下,或者像其他shell一样dash
.
如果你真的需要让现有的Bash脚本与shebang一起工作,#!/bin/sh
你有几个选择:
sh your_script.sh
,看看会发生什么 - Bash是sh
语法的超集,所以许多简单的Bash脚本都是有效的sh
脚本.sh -n your_script.sh
为rojomoke建议,它将报告语法错误而不实际执行脚本(但可能无法捕获所有问题).如果你想/需要支持sh
最好的选项,只需要指定你的脚本的shebang #!/bin/sh
- 如果它在你需要的环境中按照需要运行,那么它(根据定义)是sh
兼容的.
请注意,您可以编写sh
仍然不符合POSIX标准的兼容脚本,因为许多标准实用程序grep
都有自己的POSIX兼容功能集,您也需要遵守.但同样,POSIX兼容本身并不是目的,我建议您在尝试符合标准之前确认您确实需要支持POSIX.
我问了一个你可能会觉得有用的相关问题.