破折号与 bash 的兼容性

ura*_*ray 7 shell bash terminal compatibility dash

维基百科dash执行速度比bash。我的问题是,如果我设置/bin/shdash,所有/bin/sh在他们的 shebang 行中使用的脚本都将用于在bash下工作dash吗?

Ste*_*n D 12

不,并非所有用于 bash 的脚本都可以使用 dash。许多“bashism”在破折号中不起作用,例如 C 风格的 for 循环和双括号比较运算符。如果您有一组要用于破折号的 bash 脚本,您可以考虑使用checkbashisms。此工具将检查您的脚本中不太可能在 dash 中工作的纯 bash 功能。

  • 但是在 shebang 中带有 /bin/sh 的脚本不适用于 bash,现在是吗? (2认同)
  • @hop:它们可能不适用于 bash,但它们仍可能仅在 bash 上进行测试。 (2认同)
  • @MaciejPiechotka 任何使用`#!/bin/sh` 的shebang 行但在`/bin/sh` 中不起作用的脚本(例如,因为它是为`bash` 编写并且只在`bash` 中运行)应该被视为*已损坏*. 修复此类脚本的最简单方法是将shebang 替换为`#!/bin/bash`(或`#!/usr/bin/env bash`)。 (2认同)