Appearance
Dash 常见坑位
本页结论:写给 Bash 的脚本扔给 Dash 执行,几乎一定会因为“使用了 Bash 扩展功能”而崩溃。
1. Bashisms 导致脚本崩溃
很多开发者在写脚本时第一行写了 #!/bin/sh,但脚本里却偷偷用了 Bash 特有的语法(如 source 而不是 .,或是 let i++)。在 Ubuntu 等系统中,/bin/sh 实际上是指向 Dash 的。 坑位:脚本在开发机(可能 /bin/sh 指向 bash)跑得好好的,一部署到 Ubuntu 服务器上就疯狂报错。
2. 极其有限的调试能力
Dash 没有任何现代的报错定位提示,遇到错误时,它通常只抛出一行冷冰冰的语法错误信息,这要求开发者对 POSIX 标准有深刻的理解。