web-dev-qa-db-ja.com

bash 5の新機能

私は関係のない何かのために公式のbashリポジトリ(私は通常これをしません)を調べていましたが、bash 5がすでにベータ版であることに気付きました。 bash 5の新機能について知りたくてたまらなかったのですが、情報が見つかりませんでした。誰かがBashのバージョン4.4と5の間の変更を要約できますか

30
akxer

リリース4.4と5.0(リリース2019-01-07)の間でbashに加えられた変更は、NEWSソース配布のbashファイルにあります。

これへのリンクはここにあります (変更が多すぎてここにリストできません)。

20
Kusalananda

私と同じように、完全な変更履歴ではなく、見出しの機能を探している場合は、メンテナのChet Rameyが この投稿 で調べます。ここに興味深いセクションがあります:

このリリースでは、bash-4.4のいくつかの未解決のバグが修正され、いくつかの新機能が導入されています。最も重要なバグ修正は、nameref変数の解決方法の見直しと、ファジングによって発見された潜在的な範囲外のメモリエラーの数です。 Posix標準の解釈に準拠するためにWord分割が実行されないさまざまなコンテキストでの$ @および$ *の展開には多くの変更があり、Posix準拠のコーナーケースを解決するための追加の変更があります。

最も注目すべき新機能は、BASH_ARGV0、EPOCHSECONDS、EPOCHREALTIMEなどのいくつかの新しいシェル変数です。 `history 'ビルトインは、履歴エントリの範囲を削除し、負の引数を履歴リストの最後からのオフセットとして理解できます。ローカル変数が、前のスコープで同じ名前の変数の値を継承できるようにするオプションがあります。新しいシェルオプションがあり、有効にすると、シェルが連想配列の添え字を1回だけ展開しようとします(これは、算術式で使用される場合の問題です)。 `globasciiranges 'シェルオプションがデフォルトで有効になりました。構成時にデフォルトでオフに設定できます。

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

さらに必要に応じて、彼はこれら2つのファイルも参照しています。

16
Jacktose

`history 'ビルトインは、履歴エントリの範囲を削除し、負の引数を履歴リストの末尾からのオフセットとして理解できます。

範囲を削除する例:

history -d 123-130

または最後の10を削除:

history -d -10--1

Bash 5 Man Page からの抜粋:

'歴史'

オプションが提供されている場合、その意味は次のとおりです。

'-d OFFSET'オフセット位置の履歴エントリを削除します。 OFFSETが正の場合、履歴が表示されるときに表示されるように指定する必要があります。 OFFSETが負の場合、最後の履歴位置よりも1大きいと解釈されるため、負のインデックスは履歴の最後からカウントされ、「-1」のインデックスは現在の「history -d」コマンドを参照します。

'-d START-END' STARTからENDまでの履歴エントリを削除します。 STARTおよびENDの正および負の値は、上記のように解釈されます。

私の関連する回答を参照してください: bash履歴の範囲を削除

5
David Hatch