Site icon 时鹏亮的Blog

Ubuntu默认的sh不是bash的问题

请知悉:本文最近一次更新为 6个月 前,文中内容可能已经过时。

嗯,这其实不是个问题,但是如果你有shell脚本从CentOS迁移到Ubuntu的话,那么就需要考虑了。

Ubuntu默认的sh是dash,以下是GPT给出的dash和bash的区别:

  1. 数组操作:Bash 支持数组,可以方便地存储和操作多个元素。Dash 不支持数组操作。

  2. 关联数组:Bash 支持关联数组,允许使用字符串作为索引。Dash 不支持这一特性。

  3. 扩展的通配符:Bash 提供了更多的通配符扩展功能,如{a,b}形式的扩展。Dash 不支持这些扩展。

  4. 函数的本地变量:在 Bash 中,函数可以具有本地变量,这些变量的作用域仅限于函数内部。Dash 不支持在函数中定义本地变量。

  5. 进程替换:Bash 允许使用 <()>() 语法进行进程替换,Dash 不支持这种语法。

  6. 内置命令:Bash 具有一些与Shell相关的内置命令,这些内置命令在 Dash 中可能不完全一样或不支持。

  7. 高级的扩展功能:Bash提供了更多高级的扩展特性,如 coproc 命令、source 命令等,这些在 Dash 中可能不支持。

  8. 处理信号:Bash 允许在脚本中处理信号,而 Dash 对信号的处理支持有限。


实际情况是[[判定在dash是不能运行的,为了规避这样的情况,需要把默认的sh改为dash,具体方法如下:

ln -sf /bin/bash /bin/sh

参考资料

Ubuntu默认的dash带来的问题


如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。

尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。


与《Ubuntu默认的sh不是bash的问题》相关的博文:

Exit mobile version