
我正在編寫一個使用 的腳本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
。