Bash 5の新機能

Bash 5の新機能

私は関係のないものを見つけるために公式のbashリポジトリ(通常はしないこと)を検索していましたが、bash 5がすでにベータ版であることがわかりました。 bash 5の新機能が気になりましたが、情報が見つかりませんでした。 Bashバージョン4.4と5の間の変更を要約できますか?

答え1

バージョン4.4と5.0(2019-01-07にリリース)の間の変更は、bashソース配布ファイルで確認できます。NEWSbash

ここへのリンクがあります(ここにリストするには変更が多すぎます)。

答え2

自分と同じで、全体の変更履歴ではなく見出し機能を探している場合は、この投稿メンテナーChet Rameyがこれについて議論しました。面白い部分は次のとおりです。

このリリースでは、bash-4.4のいくつかの優れたバグが修正され、いくつかの新機能が導入されました。最も重要なバグ修正は、nameref変数がどのように解析されるか、およびファズテストによって検出された範囲外の潜在的なメモリバグの数を確認することです。 Posix標準の解釈に準拠するためにトークン化が行われていないさまざまな状況で、$ @と$ *拡張に多くの変更が加えられ、Posix適合性の特別なケースを解決するために他の変更が行われました。

最も注目すべき新機能は、BASH_ARGV0、EPOCHSECONDS、EPOCHREALTIME など、いくつかの新しいシェル変数です。 「history」組み込み関数は、ある範囲の履歴エントリを削除し、否定的な引数を履歴リストの最後のオフセットとして解釈します。ローカル変数が以前のスコープで同じ名前の変数の値を継承できるようにするオプションがあります。有効にすると、シェルが連想配列添字を一度だけ拡張しようとする新しいシェルオプションがあります(算術式でそれを使用すると問題になります)。 'globasciiranges'シェルオプションがデフォルトで有効になっており、設定時にデフォルトでオフに設定できるようになりました。

bash-4.4とbash-5.0の間に互換性のない変更があります。互換性の問題を最小限に抑えようとしましたが、nameref変数の解決方法が変わると、いくつかのnamerefの使用が異なる動作をします。デフォルトでは、拡張デバッグモードが有効になっている場合、シェルは起動時にBASH_ARGCとBASH_ARGVのみを設定します。これは間違いであり、無条件に設定され、スクリプトに多数の引数が渡されるとパフォーマンスの問題が発生する可能性があります。

より多くの情報が必要な場合は、次の2つの記事も参照してください。

  • 情報:詳細(Kusalanandaの回答にもあります)
  • 多様性:最も詳しく

答え3

「history」組み込み関数は、ある範囲の履歴エントリを削除し、否定的な引数を履歴リストの最後のオフセットとして解釈します。

範囲除去の例:

history -d 123-130

または、最後の10個を削除してください。

history -d -10--1

から抜粋Bash 5 のマニュアルページ:

「歴史」

オプションが提供されている場合は、次の意味を持ちます。

'-d OFFSET' OFFSET位置の記録項目​​を削除します。 OFFSETが正の場合は、履歴を表示したときに表示される値を指定する必要があります。 OFFSETが負の場合、最後の記録位置より1大きい値に基づいて解釈されるため、負の索引は、現在の「history -d」コマンドを参照する索引「-1」を使用して、記録の終わりで逆に計算されます。

'-d START-END' STARTとEND(含む)位置の間の履歴エントリを削除します。 STARTとENDの正と負の値は上記のように解釈されます。

私の関連する答えを参照してください。一連のbash履歴レコードを削除する

関連情報