bash - 找出脚本需要的 BASH 版本

标签 bash shell static-analysis

我写了一个 shell 脚本,它使用一些 BASH 特定命令,例如 [[ ... ]]。我知道某些 BASH 功能仅在 BASH 4 或更新版本中可用。如何在不尝试大量不同版本的情况下找出此脚本需要的 BASH 版本?

是否有某种工具可以检查所需的最低版本?

源代码在 GitHub 上可用 https://github.com/JEFF-Media-GbR/RandomRound/blob/master/randomround

最佳答案

有很多资源可以检查 a) 特定 Bash 特性的介绍和 b) 一般的 Bashism:

这些都可以用来判断一个特性是什么时候引入的。

对于 Bashisms 的列表,Bash 手册在 Appendix B 中描述了与 Bourne Shell 的差异。 (“与 Bourne Shell 的主要区别”),还有文章 How to make bash scripts work in dash在 Wooledge 维基上。

我不知道“野外”版本的分布是什么,但如果您的用户群包括 macOS 用户,请注意他们使用 Bash 3.2,除非他们使用 Homebrew 或类似软件进行升级。

至于以编程方式确定运行特定脚本所需的 Bash 版本,我不知道有任何工具可以做到这一点。 Shellcheck有点接近,因为当您的脚本以 #!/bin/sh 开头时,它可以警告 Bashisms。

关于bash - 找出脚本需要的 BASH 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45692956/

相关文章:

linux - flock 在注销/重启时不会被释放

jenkins - 如何加快 Sonar 分析工作?

java - 使用备用路径修复 CWE-288 身份验证绕过

java - Findbugs 贡献 : Method throws alternative exception from catch block without history

bash - 如何在bash中获取字符串的第一部分

linux - 在 Linux 中使用 Bash 解析文件

bash - 如何解压缩文件夹中的所有 .gz 文件并将它们组合成一个新文件而不为每个 .gz 文件生成未压缩的文件

linux - Bash 脚本也在目录内创建符号链接(symbolic link)

bash - 跨平台命令行脚本(例如 .bat 和 .sh)

android - adb jdwp 完成后不退出