raj*_*raj 8 bash scripts dash-shell
我刚刚意识到,在当前的 Ubuntu 版本中/bin/sh,不再符号链接到bash(多年来一直如此),而是改为dash。我想知道这两个 shell 之间的实际语法差异是什么,以及编写的 shell 脚本bash在dash. 有人能指出我对这两者之间差异的清晰描述吗?
一个简单的经验法则是:如果您的脚本是用 bash 编写的,请不要假设它可以在 dash 中运行。完整的差异列表超出了简单问答的范围,但本质上是 POSIX shell,因此它实现了shell 语言的 POSIX 规范dash中描述的内容,并且仅此而已。
以下是我最常遇到的常见攻击:
[[:[[ condition ]]不支持该构造dash,您需要使用[ ]它。==:要测试两个值是否相等,请=在破折号中使用,因为==不支持。source:用于获取脚本的 POSIX 命令是.。内置函数source是标准的 bash 别名.,因此始终使用. file而不是source file.shopt:这是一个 bash 内置命令,用于设置某些非标准选项。不支持dash。$RANDOM:这在 中每次使用时设置为随机数bash,但在 中不起作用dash。到目前为止,最常见的问题是缺乏[[支持。您可以在 Ubuntu Wiki 上找到更全面的列表:https://wiki.ubuntu.com/DashAsBinSh