常用的Unix shell Bash釋出第5個主要版本,這個版本主要修復了Bash 4.4中幾個明顯的錯誤,同時也加入了一些新功能。Bash是一個完整的POSIX殼層規範實作,除了有互動式命令列編輯功能,還在基礎架構上支援工作控制,並提供類似csh的功能等。

Bash 5.0主要解決Bash 4.4的錯誤,是改變對nameref變數解析的方法,和一系列以模糊測試發現的潛在超出範圍值記憶體錯誤。另外,Bash 5.0在不執行單詞拆解以符合Posix標準解釋的情況下,在不同的上下文中,$@和$*的擴充也有許多改變,而且還解決不少極端案例以增加Posix的一致性。

而本次最重要的功能更新,則是增加了新的殼層變數,BASH_ARGV0、EPOCHSECONDS和EPOCHREALTIME。而內建的History功能現在可以用來刪除歷史條目的範圍,並且將負的參數當作歷史列表末端的偏移量。Bash 5.0還增加了一個選項,允許區域變數繼承前一個作用域中,具有相同名稱的變數值。

另外,還加入一個新的shell選項,啟用後將允許shell只嘗試擴展關聯陣列下標(Subscripts)一次,但官方表示,這個功能在數學表示式中使用仍會出現問題。Bash 5.0現在會預設啟用globasciiranges的shell選項,使用者可以在配置階段將其設定為預設關閉。

官方提醒,Bash 4.4與Bash 5.0之間存在部分不相容的更新,像是nameref變數解析方法的變更,代表著使用namerefs會出現不同的行為,儘管官方提到他們已經盡可能減少這種相容性問題,但仍有部分無可避免。除此之外,現在於預設情況下,當啟用擴充偵錯模式的時候,則殼層才會在啟動時配置BASH_ARGC和BASH_ARGV,官方表示,這是一個之前的設定疏忽,在傳遞大量參數時,會造成效能低落問題。

官方建議使用者可以將Bash鏈結到已經安裝的Readline函式庫,而非使用lib/readline中的私有版本,因為只有Readline 8.0以及更新的版本,才能提供所有Bash 5.0需要的符號,使用早前的Readline函式庫版本將無法正常運作。


Advertisement

更多 iThome相關內容