Skip to content

Instantly share code, notes, and snippets.

@emasaka
Created April 13, 2011 05:06
Show Gist options
  • Select an option

  • Save emasaka/916988 to your computer and use it in GitHub Desktop.

Select an option

Save emasaka/916988 to your computer and use it in GitHub Desktop.
bash-4.2の新機能について、bash-4.1のリリースからの変更を簡単に説明します。完全な説明は、いつものとおりマニュアルページ (doc/bash.1) で読めます。
1. bashの新機能
a. 実行権限があり#!で始まらないシェルスクリプトにおいて、`exec -a foo'で$0に`foo'が設定されるようになりました。
b. コマンド置換やシェル関数によるサブシェルや、サブシェル中の組み込みコマンドは、新しくトラップを設定しなければ、トラップ文字列を再設定しないようになりました。これにより、$(trap)が呼び出し元のトラップを表示することと、新しいトラップが設定されるまでトラップ文字列が残ることを認めます。
c. `trap -p'はシェルの起動時に無視するよう設定されて性質を変更できないシグナルを表示するようになりました。
d. $'...'、echo、printfは\uXXXXや\UXXXXXXXXの形式のエスケープシーケンスを解釈するようになりました。
e. declare/typesetに新しく`-g'オプションが追加されました。シェル関数の中でも変数をグローバルスコープとします。
f. test/[/[[に新しく単項演算子-vが追加されました。変数が設定されていれば真を返します。
g. Posixモードのパースで、`! time コマンド' と、複数の連続した`!' (トグルとなる) や `time' (累積の効果はない) を許すようになりました。
h. Posixモードでは、単独の `time' コマンドにより、そのシェルと子プロセスの経過したユーザ時間、システム時間、実時間を表示するように変わりました。
j. $((...))は、Posixの仕様のように、コマンド置換の入れ子としてより先に、まず算術式展開としてパースされます。
k. 新しくシェル変数FUNCNESTが追加されました。シェル変数の入れ子 (再帰実行) の最大レベルを制御できます。
l. 組み込みコマンドmapfileはコールバックのコマンドに2つ目の引数を渡すようになりました。そのとき配列の中に代入されようとしている行です。
m. 組み込みコマンドprintfに新しい書式指定子%(fmt)Tが追加されました。値をstrftime風に整形します。
n. 新しいシェルオプション`compat41'が追加されました。
o. 組み込みコマンドcdに、Posixが義務づけている-eオプションが追加されました。
p. 配列に負の添字を指定したとき、いままではエラーになっていましたが、インデックスの最大値 + 1からのオフセットとして扱うようになりました。
q. ${変数:オフセット:長さ} の式で負の長さを指定したとき、いままではエラーになっていましたが、変数の末尾からのオフセットとして扱うようになりました。
r. パースで`time -p --'を許すようになりました。
s. Posixモードのパースで、`time'に続くトークンが`-'で始まるときには`time'をキーワードとしては認識しないようになりました。Posixモードには `time -p' はなくなります。Posix interpretation 267参照。
t. 新しいシェルオプション`lastpipe'が追加されました。パイプラインの最後のコマンドを現在のシェルのコンテキストで実行するよう指定します。このオプションは、ジョブコントロールが有効なときには影響しません。
u. 変数 `$!' が履歴展開として展開されることはなくなりました。
v. Posixモードで、特別な組み込みコマンドではないコマンドの前に置かれた代入でエラーが起きたときに、シェルが終了することはなくなりました。
w. 対話的モードではなく-uオプションがセットされているときに、値の設定されていない変数を`%'、`#'、`//'、`^'、`,'、長さ指定を使って展開しようとしたときに、シェルが終了します。
x. Posixモードでは、`.'コマンドに与えられた引数が$PATHから見つからなかったときに、引数をそのまま使ってカレントディレクトリから効率的に探します。Posix-2008での変更によります。
2. readlineの新機能
a. 履歴ライブラリは$HOMEが設定されていないときにカレントディレクトリに履歴を書き込むという動作はしません。これは、履歴ファイル名を指定しないアプリケーションによるセキュリティの問題の可能性を解決します。
b. 新しい変数`completion-display-width'を設定できます。補完候補を表示する桁数を指定します。
c. 新しい変数`completion-case-map'を設定できます。補完で大文字と小文字を区別しない設定のときに、`-' and `_'を区別します。
d. readlineが大文字と小文字を区別しない設定のときに割り当てられないviモードのコマンドがあるのを避けるために、コマンド名を追加しました。
e. 新しい変数`menu-complete-display-prefix'を設定できます。menu completionにおいて、補完候補で共通する先頭の部分を、候補の最後ではなく最初に表示します。
@yasikoba
Copy link

脱字を、ひとつ見つけました。
「m. 組み込みコマンドpritf」→「m. 組み込みコマンドprintf」

@emasaka
Copy link
Author

emasaka commented Apr 18, 2011

反映しました。Thankx! > yasikoba

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment