如何檢測 Bash >=4.0?

如何檢測 Bash >=4.0?

我正在編寫一個使用 的腳本read -i,因此它需要 Bash 4.0 或更高版本。

不幸的是,截至 2020 年初,macOS 仍然附帶 Bash 3.x,並且我的腳本的許多用戶將使用 Mac。由於 Apple 已將預設 shell 更改為 zsh,因此我不希望他們會更新捆綁版本。

因此,我希望我的腳本能夠檢測 Bash 是否足夠新,並退出並顯示一條有用的錯誤訊息,指導用戶升級。

我知道我可以比較${BASH_VERSION},但這是一個具有非數字、可能不可靠格式的字串。對此做出假設感覺很脆弱。

實現這一目標的最佳方法是什麼?

requireBash4() {
  if <something here>; then
    >&2 echo "Bash 4.0 or newer is required."
    >&2 echo "Once you're upgraded, re-run this script."
    exit 1
  fi
}

答案1

if ((BASH_VERSINFO >= 4)); then ...

請注意,這BASH_VERSINFO是一個陣列。與 bash 中的任何陣列一樣,將其用作普通變數是指其第 0 個元素。((BASH_VERSINFO[0] >= 4))如果你覺得更清楚的話也可以使用。

是的,至少從 bash 2.0 開始就支援這個變數和語法。

BASH_VERSINFO

一個只讀取組變量,其成員保存此 bash 實例的版本資訊。指派給陣列成員的值如下:

BASH_VERSINFO[0] 主要版本號(發行版)。
BASH_VERSINFO[1] 次要版本號(版本)。
BASH_VERSINFO[2] 補丁等級。
BASH_VERSINFO[3] 建置版本。
BASH_VERSINFO[4] 發布狀態(例如 beta1)。
BASH_VERSINFO[5] 的價值MACHTYPE

相關內容