mfn*_*lex 6 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:
这些都可以用来确定某个功能何时被引入。
有关 Bashism 的列表,Bash 手册在附录 B中描述了与 Bourne Shell 的差异(“与 Bourne Shell 的主要差异”),并且Wooledge wiki 上有文章如何使 bash 脚本在 dash 中工作。
我不知道“野外”版本的分布是什么,但如果您的用户群包括 macOS 用户,请注意他们使用 Bash 3.2,除非他们已使用 Homebrew 或类似版本进行升级。
至于以编程方式确定运行特定脚本所需的 Bash 版本,我不知道有任何工具可以做到这一点。Shellcheck有点接近,因为当您的脚本以#!/bin/sh.