bash 和 dash 之间的语法区别是什么?

bash 和 dash 之间的语法区别是什么?

我刚刚意识到,在当前的 Ubuntu 版本中,/bin/sh不再有符号链接到bash(多年来一直如此),而是链接到。我想知道这两个 shell 之间的实际语法差异是什么,以及考虑到这一点而编写的 shell 脚本在 下无法运行的dash可能性有多大。有人能给我指出这两者之间差异的清晰描述吗?bashdash

答案1

一个简单的经验法则是:如果你的脚本是用 bash 编写的,不要假设它会在 dash 中工作。完整的差异列表超出了简单问答的范围,但本质上,它dash是一个 POSIX shell,因此它实现了shell 语言的 POSIX 规范 并且仅此而已

以下是我最常遇到的常见攻击性言论:

  • [[[[ condition ]]不支持该构造dash,因此您需要使用[ ]
  • ==:测试两个值是否相等,由于不支持,因此请使用=破折号。==
  • source:获取脚本的 POSIX 命令是.source内置命令是标准的 bash 别名.,因此始终使用. file而不是source file
  • shopt:这是 bash 内置命令,用于设置某些非标准选项。不支持dash
  • $RANDOM:每次使用时都会将其设置为一个随机数bash,但在中不起作用dash

到目前为止,最常见的问题是缺乏[[支持。你可以在 Ubuntu Wiki 上找到更全面的列表:https://wiki.ubuntu.com/DashAsBinSh

相关内容