歡迎光臨
每天分享高質量文章

Bash 5.0 釋出及其新功能 | Linux 中國

第五個版本側重於新的 shell 變數和許多重大漏洞修複。它還引入了一些新功能,以及一些與 bash-4.4 不相容的更改。

— Ankush Das


郵件串列[1]證實最近釋出了 Bash-5.0。而且,令人興奮的是它還有新的功能和變數。

如果你一直在使用 Bash 4.4.XX,那麼你一定會喜歡 Bash[2] 的第五個主要版本。

第五個版本側重於新的 shell 變數和許多重大漏洞修複。它還引入了一些新功能,以及一些與 bash-4.4 不相容的更改。

新功能怎麼樣?

在郵件串列解釋了此版本中修複的 bug:

此版本修複了 bash-4.4 中的幾個主要錯誤,並引入了幾個新功能。最重要的 bug 修複是對 nameref 變數的解析以及透過模糊測試發現的許多潛在的記憶體越界錯誤。在為了符合 Posix 標準解釋而不進行單詞拆分的背景關係中,對 $@ 和 $* 的展開做了許多改變,另外還有解決極端情況中 Posix 一致性的修改。

它還引入了一些新功能。根據其釋出說明,最值得註意的新功能是幾個新的 shell 變數:

BASH_ARGV0EPOCHSECONDS 和 EPOCHREALTIME。內建命令 history 可以刪除指定範圍的條目,並能將負數理解為從歷史末端開始的偏移量。有一個選項允許區域性變數繼承前一個範圍內具有相同名稱的變數的值。有一個新的 shell 選項,在啟用它時,會導致 shell 只嘗試一次擴充套件關聯陣列下標(這在算術運算式中使用時會出現問題)。globasciiranges 這個 shell 選項現在預設啟用。可以在配置時預設關閉它。

Bash-4.4 和 Bash-5.0 之間有哪些變化?

其更新日誌提到了不相容的更改和所支援的 readline 版本歷史記錄。它是這麼說的:

bash-4.4 和 bash-5.0 之間存在一些不相容的變化。儘管我已經儘量最小化相容性問題,但是對 nameref 變數解析的更改意味著對變數名取用的某些使用會有不同的行為。預設情況下,如果啟用了擴充套件除錯樣式,shell 僅在啟動時設定 BASH_ARGC 和 BASH_ARGV。它被無條件地設定是一個疏忽,並且在指令碼傳遞大量引數時會導致效能問題。

如果需要,可以將 Bash 連結到已安裝的 Readline 庫,而不是 lib/readline 中的私有版本。只有 readline-8.0 及更高版本能夠提供 bash-5.0 所需的所有符號。早期版本的 Readline 庫無法正常工作。

我相信一些新增的功能/變數非常有用。我最喜歡的一些是:

◈ 有一個新的(預設情況下禁用,檔案中沒有說明)shell 選項,用於在執行時啟用/禁用向 syslog 傳送歷史記錄。
◈ 正如檔案一直所說的那樣,除非 shell 處於除錯樣式,否則它不會在啟動時自動設定 BASH_ARGC 和 BASH_ARGV,但如果指令碼在上層取用它們且沒有啟用除錯樣式,那麼 shell 將動態建立它們。
◈ 現在可以使用 -d start-end 刪除指定範圍的 history 條目。
◈ 如果啟用了作業控制的非互動式 shell 檢測到前臺作業因 SIGINT 而死亡,則其行為就像接收到 SIGINT 一樣。
◈ BASH_ARGV0:一個新變數,擴充套件為 $0,併在賦值時設定為 $0

要檢視完整的更改和功能串列,請參閱郵件串列文章[1]

總結

你可以使用下麵的命令檢查你當前的 Bash 版本:

  1. bash --version

你很可能安裝了 Bash 4.4。如果你想獲得新版本,我建議等待你的發行版提供它。

你怎麼看待 Bash-5.0 釋出?你在使用其他 bash 的替代品麼?如果有的話,這個更新會改變你的想法麼?

請在下麵的評論中告訴我們你的想法。


via: https://itsfoss.com/bash-5-release

作者:Ankush Das[4] 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂