Bash

bash 5.0のNEWSファイル私訳

 bash 5.0(とreadline 8.0)がリリースされたので、NEWSファイル(新機能リスト)からbash 5.0の新機能の部分を訳してみました。

これはbash-5.0にbash-4.4のリリースから追加された新機能の簡潔な説明です。
いつもどおり、完全な説明を探しているのであればマニュアルページ
(doc/bash.1)が目的の場所です。

1.  Bashの新機能

a. 組み込みコマンド`wait'は、最後に作られたプロセス置換の実行を待つよ
   うになりました。

b. Unix紀元(Epoch)から秒数に展開される変数EPOCHSECONDSがあります。

c. Unix紀元(Epoch)からのマイクロ秒数に展開される変数EPOCHREALTIMEが
   あります。

d. 組み込みコマンドとしてロードできる新しいコマンド: rm、stat、fdflags
   (訳注:exampleディレクトリにあるサンプル)。

e. BASH_ARGV0:展開すると$0の値となり、代入すると$0を設定する新しい変数。

f. キーに割り当てられるreadlineの関数shell-expand-lineに数値の引き数が
   与えられると、クォートの除去を実行せず、コマンド置換やプロセス置換
   を抑制します。

g. `history -d'は負の引数を認識します:履歴リストの末尾からのオフセットです。

h. 予約語`coproc'の`name'引数は、単語展開を受けるようになりました。こ
   れにより、ループでユニークなコプロセスを作れます。

i. 関数内でnamerefの名前解決のループは、グローバルスコープでの名前の変数
   に解決されるようになりました。

j. 組み込みコマンド`wait'に`-f'オプションが追加されました。指定したジョ
   ブやプロセスが状態が変化するのを待つ代わりに、終了するまで待つこと
   を表します。

k. config-top.hの定義により、制限付きシェルが起動時の環境を無視して
   $PATHに静的な値を使うようにできます。

l. プロセス置換は、コマンド置換と同様に、`v'オプションを継承しません。

m. 対話的でないシェルのジョブコントロールで、フォアグラウンドジョブが
   SIGINTにより死亡したことの検出が有効になっていれば、SIGNITを受け取っ
   たときにそう動作します。

n. SIGCHLDのトラップは、子プロセスがそれぞれ終了するとき、シェルが
   Posixモードでジョブコントロールが有効でないときでも、1度だけ実行さ
   れます。

o. 新しいshoptオプション:localvar_inherit。設定すると、ローカル変数
   は、直前のスコープにある同じ名前の変数の値を継承します。

p. `bind -r'は、キーにNULLに割り当てる前に、キーシーケンスが割り当てら
   れているかどうかをチェックするようになりました。複数キーからなるシー
   ケンスのキーマップを作るのを防ぎます。

q. 行編集の`operate-and-get-next'コマンドへの数値の引き数は、どの履歴
   エントリを使うか指定します。

r. 位置パラメータは、シェルの起動ファイルが走る前に設定されます。その
   ため、起動ファイルでも$@を使えます。

s. 継承されたOLDPWDがディレクトリかどうかシェルがチェックするのを無効
   にするよう指定するコンパイル時オプションがあります。

t. 組み込みコマンド`history'では、`-d start-end'によって履歴エントリの
   範囲を削除できるようになりました。

u. キーに割り当てられるreadlineのコマンド`vi-edit-and-execute-command'
   は、編集した内容からコマンドを実行した後で、readlineをviの挿入モー
   ドに戻すようになりました。v. コマンドの補完コードは、readlineの変数
   completion-ignore-case variableが設定されると、エイリアスとシェル関
   数の名前に大文字と小文字は区別しないでマッチするようになりました。

w. 新しいシェルオプション`assoc_expand_once'があります。連想配列の添字
   を一度だけ展開しようと試みます。

x. シェルは拡張デバッグモードが有効なときにだけ起動時にBASH_ARGVと
   BASH_ARGCを設定します。以前の、これらを無条件で設定する動作は、シェ
   ルの互換性のオプションにより利用できます。

y. 組み込みコマンド`umask'は、8進数の777より大きいモードやマスクを受け
   付けるようになりました。

z. 組み込みコマンド`times'は、小数点を表示するときに現在のロケールを尊
   重するようになりました。

aa. 履歴をsyslogに送る機能を実行時に有効にしたり無効にしたりするオプショ
   ンが新しく加えられました。デフォルトで無効で、ドキュメントに記載さ
   れていません。

bb. 互換性レベルが44以下でなければ、変数の属性を変更する特殊な組み込み
   コマンドの前に置かれた変数代入が、呼び出し元環境に逆伝播しないように
   なりました。

cc. ビルド時に、config-top.hに$HISTSIZEのデフォルト値を設定できます。

dd. 組み込みコマンド`complete'に、補完に行の初期文字列を与える-Iオプショ
   ンを指定できるようになりました。

ee. bashのmallocは、128Kバイトより大きい要求を満たすために、初期状態で
   mmapを使うようになりました(可能であれば)。freeはカーネルにページ
   を返すためにmfreeを使えます。

ff. すでにドキュメントに書かれているとおり、デバッグモード以外では、シェ
   ルは起動時に自動的にBASH_ARGCとBASH_ARGVを設定しません。しかし、デ
   バッグモードを有効にしていなくても、スクリプトがトップレベルでこれ
   らを参照していれば、動的に作成します。

gg. localvar_inheritオプションは、異なる種類の変数(例:インデックスに
   よる配列と連想配列)であれば値を継承しようとしません

hh. `globasciiranges'オプションがデフォルトで有効になりました。コンフィ
   ギュレーション時に、デフォルトでオフに設定できます。

ii. 連想配列とインデックスによる配列では、単独の空白に一致する添字を受
   け付けるようになりました。

jj. `checkwinsize'はデフォルトで有効になりました。

kk. shoptオプションの`localvar_unset'が公開され、ドキュメントに載りました。

ll. shoptオプションの`progcomp_alias'が公開され、ドキュメントに載りました。

mm. シグナル名を処理するコードでは、SIGRTMAXまでの`SIGRTMIN+n'を使える
   ようになりました。

nn. 組み込みコマンドとしてロードできる新しい`seq' コマンドがあります
   (訳注:exampleディレクトリにあるサンプル)。

oo. トラップの実行は、(内部の)`eval'の呼び出しの最大を尊重するように
   なりました。トラップは`eval'のように実行されると考えられているからです。

pp. 変数$_は、フォークするコマンドを実行しても変わりません。

qq. 組み込みコマンド`kill'は、対象のアプリケーションが対応していなくて
   も、-sSIGNAMEと-nSIGNUMをサポートするようになりました。

rr. POSIXモードで`shift_verbose'オプションを使えるようになりました。

2.  Readlineの新機能

a. インクリメンタルでないviモードの検索(`N'、`n')で、Posixで規定され
   たシェルのパターンで検索できるようになりました(可能であれば
   fnmatch(3)を使う)。

b. キーに割り当てられるコマンドに新しく`next-screen-line' and
   `previous-screen-line'があります。カーソルを物理行のそれぞれ次と前
   の行の同じカラムに移動します。

c. デフォルトでcontrol-矢印キーの組合せが割り当てられています。

d. `quoted-insert'への負の引数(-N)は、続くN文字をquoted-insertで入力
   することを意味します。

e. 新しい公開関数:rl_check_signals()。readlineがカスタマイズされた読
   み込み関数からの入力を待っている間にキャッチしたシグナルにアプリケー
   ションが反応できるようになります。

f. inputrcファイルで、readlineのバージョンによる条件を使えるようになり
   ました。フルセットの算術比較演算も使えます。

g. inputrcファイルで変数を比較する単純な機能を使えるようになりました。
   使える演算子は等号と不等号です。文字列変数は値で比較されます。論理
   変数`on'と`off'のどちらかで比較されます。変数名と演算子の間は空白で
   区切られます。

h. 履歴展開ライブラリは、コマンド置換とプロセス置換、グロブ展開に対応
   するようになりました。単語のどこに現れてもかまいません。

i. 履歴ライブラリには、内部のクォート状態をアプリケーションから設定で
   きる新しい変数があります。これにより、クォート状態を前の行から継承
   できます。

j. readlineは、アプリケーションが定義するキーマップの名前に対応しまし
   た。これには、新しい公開関数rl_set_keymap_name()を使います。

k. "Insert"キー(あれば)により、上書きモードに移るようになりました。