11.1贝壳学

贝壳有几个家族,最突出的是伯恩家族和C shell家族是非常不兼容的。如果你想编写可移植的shell脚本,避免使用C shell家族的成员。这个这个外壳差异常见问题包括Posix壳的小历史,以及对其中几个进行比较。

下面我们介绍Bourne shell家族的一些成员。

灰烬

Ash通常用于GNU/Linux和BSD系统作为与Bourne兼容的轻量级外壳。灰烬0.2有一些0.3.x系列中修复的错误,但可移植的shell脚本应该可以解决这些问题,因为0.2版仍附带许多GNU/Linux发行版。

与灰分0.2兼容:

  • 不使用'$?'展开空变量或未设置变量后,或在评估:
    foo公司=$foo美元echo“不要使用它:$?”eval“echo”不要使用它:$?“”
  • 不要在变量扩展中使用命令替换:
    猫${FOO=`bar`}
  • 请注意,单个内置替换不是由subshell,因此它们的效果适用于当前shell!请参见外壳替换,项目“命令替换”。
猛击

要检测您是否正在运行Bash,请测试底座_版本已设置。要求Posix兼容性,运行'集合-o posix’. 请参见Bash Posix模式在里面GNU Bash参考手动,以了解详细信息。

Bash 2.05及更高版本

Bash 2.05及更高版本使用不同的格式的输出设置内置,旨在评估输出更容易。然而,此输出与早期版本不兼容Bash的版本(可能还有其他许多shell)。所以如果使用Bash 2.05或更高版本执行配置,您还需要对所有其他构建任务使用Bash 2.05。

肯尼亚先令

Korn shell与Bourne系列兼容,并且主要符合Posix。它通常有两种主要的变体被称为'88肯尼亚先令'和'93肯尼亚先令',以首字母年份命名释放。它通常被称为科什,但被称为第页在某些主机上,如果您设置了适当的路径。

在Solaris 11上,/垃圾桶/桶/usr/bin/ksh都是93肯尼亚先令’. 在Solaris 10及更早版本上,/垃圾桶/桶是一个pre-Posix Bourne shell和Korn shell可在其他地方找到: /usr/bin/ksh是'88肯尼亚先令'在Solaris 10上, /usr/xpg4/bin/sh是符合Posix的变体88肯尼亚先令'在Solaris 10及更高版本上,/usr/dt/bin/dtksh是'93肯尼亚先令’.非标准变体可能是可选的一部分包装。这些包裹没有额外费用,但不是最小操作系统安装的一部分,因此某些安装可能没有。

从Tru64 4.0版开始,Korn shell/usr/bin/ksh也可以作为/usr/bin/posix/sh.如果环境变量箱子_SH设置为xpg4(xpg4),子调用标准外壳符合Posix。

Pdksh公司

Korn shell的公共域克隆名为pdksh公司分布广泛可用:它具有“88肯尼亚先令'功能以及一些它自己的。它通常设置KSH_版本,除非调用为/垃圾桶/桶在OpenBSD上,类似于Bash,您可以要求运行Posix兼容性集合-o posix’. 不幸的是pdksh公司5.2.14(截至2007年1月的最新稳定版本)Posix模式存在缺陷并导致pdksh公司从波西出发至少有一个方面,看外壳替换.

Zsh公司

检测您是否正在跑步兹什,测试是否ZSH_版本已设置。默认情况下兹什与Bourne shell兼容:必须执行'模拟sh’,兹什3.1.6-dev-18之前的版本还必须设置NULLCMD公司到':’. 请参见兼容性在里面Z Shell手册,以了解详细信息。

默认Mac OS X第页最初是Zsh;已更改为Mac OS X 10.2中的Bash。