我认为这/bin/sh
是我选择的外壳的符号链接。我一直使用bash
,所以我认为这/bin/sh
会指向/bin/bash
。但事实证明,它指向/bin/dash
。
它变得更有趣。我开始dash
并执行echo $SHELL
并打印/bin/bash
(所以它们基本上相同?)。但是, 的手册页与 的手册页dash
完全不同bash
(所以它们不一样?)。
wzz*_*zrd 46
由于一些原因,Debian 和 Ubuntu 改用了 dash (iirc)。首先,多年来,Bash 变得越来越大。事实上,/bin/bash
我的 Ubuntu 8.04 系统上的二进制文件几乎是/bin/dash
. 现在,这对于日常 shell 使用来说并不重要,但在以下情况下确实很重要:
使用 Dash 而不是 Bash 进行脚本编写的缺点是,很多人使用 Bash独有的语法细节,即所谓的Bashisms。Bashisms 的例子是子字符串,像这样:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
Run Code Online (Sandbox Code Playgroud)
和这个:
echo ${a#123}
4567890
Run Code Online (Sandbox Code Playgroud)
另一方面,Dash 主要旨在符合 POSIX 标准(仅此而已),如果您尝试这样做,会给您一个Bad substition错误:
echo $SHELL
/bin/dash
# actually, it will read /bin/bash above, because if you just run dash
# it will not set the $SHELL variable :)
a=1234567890
echo ${a}
1234567890
echo ${a:3}
dash: Bad substitution
Run Code Online (Sandbox Code Playgroud)
如果您使用/bin/sh
(因此dash
)作为您的 shellscript 的解释器并在其中使用 Bashism,这将很重要。Debian 和 Ubuntu 有很好的关于 Bashisms 的 wiki 页面,以及为什么它们在一般的 shellscripts 和特别是 init-scripts 中都很糟糕。因此,您应该有意识地选择是否需要/bin/sh
或/bin/bash
作为脚本的解释器。
Dash 不应用作系统上的默认 shell。只需使用 Bash 即可。为了脚本的可移植性,您可以使用 Dash 作为解释器来增加脚本在其他 Linux 版本和 Unix 上运行的几率。
归档时间: |
|
查看次数: |
23117 次 |
最近记录: |