我通常用bash编写脚本。我告诉其他人用bash运行它们,我使用#!/usr/bin/env bash
作为shebang行。
当我阅读有关shell脚本的文章时,我经常会发现有关“便携式”解决方案建议的评论,这些解决方案不使用“bashisms”。便携式shell脚本似乎可以在任何Bourne Shell衍生产品中运行,例如。 bash,ksh或csh。
对我来说,这似乎有点奇怪。为什么你不知道你运行脚本的shell是什么?所以我的问题是:便携式shell脚本的实际用途是什么?如果您想使用bash功能,为什么不简单地使用bash?我认为在需要可移植性时会出现常见情况,为什么会经常提及?也许某些环境因历史原因需要可移植性 - 我不知道 - 但我很想知道这些环境是什么。
提前致谢!
修改
我的答案和评论中的结论(谢谢!):
底线:你不能总是在任何你喜欢的地方使用bash,但POSIX shell可能已经存在。
答案 0 :(得分:4)
为什么你不知道你运行脚本的shell是什么?
bash
的不同版本中,并非所有bash
功能都能正常工作(请参阅compat31
,compat32
,compat40
,compat41
选项)。非bash
用法的一些常见示例:
dash
是Debian和Ubuntu的系统shell bash
3.2而不是4.x ksh
bash
需要在FreeBSD系统上单独安装。答案 1 :(得分:1)
这将是 Bourne Shell 兼容性本身,因此脚本可以在只有sh
或任何其他的简单机器上运行具有任何(Bourne兼容)shell的计算机。您显然仅执行此操作以获得完整且完整的兼容性。