我通常用 bash 编写脚本。我告诉其他人在 bash 中运行它们,并#!/usr/bin/env bash
用作 shebang 行。
当我阅读有关 shell 脚本的内容时,我经常会发现一些评论,其中包含不使用“bashisms”的“便携式”解决方案的建议。可移植的 shell 脚本似乎可以在任何 Bourne Shell 衍生产品中运行,例如。bash、ksh 或 csh。
对我来说,这似乎有点奇怪。为什么你不知道你在哪个 shell 中运行你的脚本?所以我的问题是:可移植 shell 脚本的实际用途是什么?如果您喜欢使用 bash 功能,为什么不简单地使用 bash?
我假设在需要可移植性时存在常见情况,否则为什么会如此频繁地提及它?也许某些环境出于历史原因需要可移植性——我不知道——但我有兴趣找出这些环境是什么。
提前致谢!
编辑:
我从您的回答和评论中得出的结论(谢谢!):
- 您可能需要避免使用较新的 bash 功能,因为它们可能并非在所有 bash 版本中都可用,并且某些计算机将安装旧版本。
- 安装程序脚本应该可以在您无法控制的计算机上运行。并非所有类 Unix 操作系统默认都带有 bash。相反,POSIX shell 几乎是普遍可用的,因此它提供了比 bash 更好的覆盖范围。
- 您可能需要在 1000 台计算机上运行脚本,但您不想(或不能)到处安装 bash。一个 POSIX shell 可能是可用的。
- 您甚至可能无法在您喜欢的计算机上安装 bash。例如,这可能是由于缺少管理权限、缺少平台的 bash 包或缺少资源(如“基本”计算机)。同样,POSIX shell 可能是可用的。
- 在某些环境中,您不能假设 shell 只是 POSIX shell,例如在 System V 样式的 init 脚本中。(它是否正确?)
底线:你不能总是在任何你喜欢的地方使用 bash,但 POSIX shell 可能已经存在。