Posted at

[Qiita] [日本語訳] bash-5.0 NEWS


bash5がついにリリースされました。

といっても知人から言われて気づいたのですが...

そこで、メンテナのChet Ramey氏の通知を和訳してみます。

原文: http://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063.html

ここにたどり着く前のリンク: https://unix.stackexchange.com/questions/478590/whats-going-to-be-new-in-bash-5

Cj-bc 未公開記事より


フルバージョンはのちにあげますが、時間がかかるので先に新機能の章のみ訳します

尚素人訳なので間違っている可能性があります。色々指摘があれば投げてください。

この文章はGithubで管理されているので、そちらにPR送ってくださっても大丈夫です: Cj-bc/translations

There are/is系は全て~が追加されましたと訳していますが、ドキュメントに書かれていなかったのが公式に書かれたりしただけな可能性があります。


これは、bash-4.4のリリース後bash-5.0に追加された新機能の雑破な説明です。いつもと同じように、完全な情報を得たい場合はマニュアルページ(doc/bash.1)を使ってください。


1. Bashの新機能


  • a. waitビルトインコマンドが最後に作成したプロセス置換の終了を待つことができるようになりました。

  • b. EPOCHSECONDS 変数が追加されました。これはUnix時間からの経過時間を秒数で示します。

  • c. EPOCHREALTIME 変数が追加されました。これはUnix時間からの経過時間をμsの精度で示します。

  • d. 新たに読み込めるビルトイン: rm, stat, fdflags

  • e. BASH_ARGV0: 新しい変数で、実行時に$0として展開され、代入時に$0を設定する1

  • f. 数学的な引数が渡された場合、readlineのバインド可能なshell-expand-lineコマンドはクォートの削除を行わず、コマンド置換とプロセス置換を抑制します。

  • g. history -dが負数の引数に対応しました: 負数の引数は、履歴の一番後ろからの数となります 2

  • h. coprocにて予約語のname引数がワード展開されるようになり、ループ中にユニークなcoprocsを作成することができるようになりました。 3

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

  • j. waitビルトインコマンドに、指定されたjobやプロセスの状態が変わるまでの代わりに終了されるまで待機する-fオプションが追加されました。 3

  • k. 制限付きshellで使用するために、環境がどうであろうと起動時にPATHに静的な(一定の?)値を使えるようにする設定が config-top.h にあります。

  • l. プロセス置換は、コマンド置換と同じように 4 vオプションを継承しません

  • m. もし、job操作できるインタラクティブシェルではないshellがフォアグラウンドのjobがSIGINTによって殺されたのを検知した場合、そのシェル自身もSIGINTを受けたかのように振舞います。

  • n. shellがPOSIXモードの時、例えjob操作が有効になっていなくてもSIGCHLDトラップは存在する子シェルに対して一度ずつ実行されます。

  • o. shoptの新しいオプション: localvar_inherit; 有効な時、ローカル変数は一番近い直前のスコープの同名の変数の値を継承します。

  • p. bind -rは複数のキー配列5 を作成するのを避けるために、キーをNULLに設定する前にキー配列が設定されていないか確認します。

  • q. 行編集のoperate-and-get-nextコマンドに対する数学的な引数は、どの履歴お項目を使用するかを指定します 3

  • r. 位置パラメーターはシェルの起動ファイルを実行する前に割り当てられるため、起動ファイルはaddress@hidden6を使用することができます 3

  • s. 継承された OLDPWD がディレクトリであるかの確認強制的にを無効化するコンパイル時オプションが追加されました。

  • t. historyビルトインは-d 始点-終点を用いて履歴を歯に指定して削除することができます。

  • u. readlineのバインド可能なvi-edit-and-execute-commandコマンドは編集されたファイルからコマンドを実行した後、readlineをviの挿入モードへと戻します。

  • v. コマンド補完コードは、 readlineの completion-ignore-case 変数が設定されていればエイリアスや関数名に大文字小文字を無視してマッチします。

  • w. 連想配列のsubscripts7を一度のみ展開させるassoc_expand_onceシェルオプションが追加されました。

  • x. シェルは発展的なデバッグモード(extended debugging mode)が有効な時のみ起動時に BASH_ARGV と BASH_ARGC を設定します。昔の制限のない5挙動はシェルの互換性オプション(shell compatibility options)5として利用可能です。

  • y. umaskビルトインは8進数の777より大きいモード/マスクを許可するようになりました。 3

  • z. timesビルトインコマンドは10進数の出力をする時5現在のロケールに敬意を払います(訳注: ロケールによって挙動が変わる?) 3

  • aa. ランタイムにsyslogに履歴を送るのを有効化/無効化する新しいシェルオプション(デフォルトでは無効、undocumented)が追加されました。

  • bb. bashは、互換性レベルが44以下でない限り、呼び出し元に伝え戻すように変数の挙動を変える特別なビルトインコマンドの前に変数定義をもう許容しなくなりました。 3 8

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

  • dd. completeビルトインに、行に初期値として補完を渡す-Iオプションが追加されました 3

  • ee. bash内部のmallocは128kB以上の要求を満たすために(使用可能であれば)mmapを使用するようになりました。そのため、 free はカーネルにページを返すのにmfreeを使うことができます。 3

  • ff. shellはドキュメントに書かれてきた通り、デバッグモードでない限り起動時に BASH_ARGV と BASH_ARGC を自動的に設定しませんが、トップレベルにて5スクリプトが参照するとデバッグモードが無効化されていても直接作成します。

  • gg. localvar_inherit オプションは互換性のない型(例: 配列と連想配列)の変数からは値を継承しません。

  • hh. globasciirangesオプションがデフォルトで有効になりました; configuration時にデフォルトで無効にすることができます。

  • ii. 連想配列/配列で一つの空白からなり立つ添字を使うことができます。

  • jj. checkwinsizeはデフォルトで有効化されました。

  • kk. shoptオプションのlocalvar_unsetは可視化され、ドキュメントに追加されました。

  • ll. shoptオプションのprogcomp_aliasは可視化され、ドキュメントに追加されました。

  • mm. シグナル名解決のコード5はSIGRTMAX までの SIGRTMIN+nを認識するようになりました。

  • nn. 新しく、ロード可能なseqビルトインが追加されました。

  • oo. トラップ例外はevalの(内部の)最大の祈り(invocations of eval)5を尊重して動くようになりました。これはtrapがevalを使っているかのように実行されるからです。 3

  • pp. $_変数はそれ9がフォークしているコマンドをシェルが実行する時に変更されなくなりました。 3

  • qq. killビルトインは例えアプリケーションが対応していなかったとしても-sSIGNAME-nSIGNUMに対応するようになりました。

  • rr. POSIXモードはshift_verboseオプションを有効化します。


2. Readlineの新機能


  • a. インクリメント式でない5viモードのサーチ(N, n)はPOSIXが示すようにシェルパターンを検索することができるようになりました。(使用可能ならfnmatch(3)を使用します)

  • b. 新しくバインド可能なnext-screen-lineprevious-screen-lineが追加されました。これらはカーソルを一つ後/一つ前の物理的な行の同じ列にそれぞれ移動します。

  • c. control-arrow-key キーコンビネーションにデフォルトのキーバインドが追加されました。

  • d. quoted-insertへのマイナス付きの引数(-N)は、次のN文字を quoted-insert を使用して挿入することを意味します。

  • e. 新たなパブリックな関数: rl_check_signals(); 独自のread関数を使って入力を待っている間にreadlineが捕捉したシグナルに対してアプリケーションが応答することを許可します。 3 8

  • f. inputrcファイル内で条件付きのreadlineのバージョンテストを、全ての数学的比較演算子を使用して行うことができるようになりました。 3

  • g. inputrcファイル内で使うことのできる簡単な変数比較機能が使用可能になりました。使用できる演算子はイコールとノットイコールです。文字列の変数は値と(訳注: =文字列と?)比較可能です。ブール値の変数はonoffにのみ比較可能です。変数名と演算子の間には空白文字が必要です。

  • h. 履歴展開ライブラリ5はコマンド置換/プロセス置換と発展的なglobを理解できるようになり、単語のどこにでてきても受け付けるようになりました。

  • i. 履歴展開ライブラリ5はアプリケーションにquoting状態の初期値を設定する変数を持ちました。そのため、quoting状態を直前の行から継承することができます。

  • j. Readlineはアプリケーション定義のキーマップ名を許可するようになりました; そのために新たなパブリック関数 rl_set_keymap_name() が追加されました。

  • k. キーパッドの"Insert"キーが利用可能な場合、readlineを上書きモード(overwrite mode)に変更します。


[2019-01-09 21:42]





  1. $0を設定する?? 



  2. offsetの訳し方はこれでいいのだろうか 



  3. 全体的に大丈夫かこれ? 



  4. コマンド置換はvを継承するのか否か? 



  5. どう訳せばいいのだろうか、しっくりこない 



  6. chflagsで指定できるhidden?@に見覚えはあるけれども情報求 



  7. "subscripts"「下付き文字」の訳し方とは? 



  8. 修飾関係に不安しかない 



  9. 何を指しているのかわからない