rcmdnk's blog

入門bash 第3版

Bashのメジャーアップデートバージョンである Bash 5.0.0がリリースされました。

Bash 5.0.0

Bash-5.0 release available

4.0がリリースされたのが2009年なので メジャーアップデートは10年ぶりということになります。

ただ大きく変わる点があるというよりはバグ修正などが中心で、 その中で一部非互換性がどうしても出てきたので メジャーバージョンを上げるという形を取った様です。

この非互換性については見てる限りでは通常ユーザーが使ってる限りは 出会うことはないかな、という程度のものではありますが。

新機能としては新たにシェル変数が追加されました。

b. There is an EPOCHSECONDS variable, which expands to the time in seconds since the Unix epoch.

c. There is an EPOCHREALTIME variable, which expands to the time in seconds since the Unix epoch with microsecond granularity.

e. BASH_ARGV0: a new variable that expands to $0 and sets $0 on assignment.

  • EPOCHSECONDS
  • EPOCHREALTIME
  • BASH_ARGV0

EPOCHSECONDSはUnix時間を保持していてdate +"%s"と同じ値です。

  • EPOCHREALTIMEはマイクロ秒まで含めたUnix時間でdate +"%s.%6N"と同じ値になります 1

この2つに関しては色々と使い所がありそうです。

BASH_ARGV0は0番目の引数、つまりはスクリプト自体の名前だったりするわけですが、 これまでも$0で参照出来ていたものであまり使いみちが分かりません。

Bash-5.0-alpha available : bash

このRedditのスレッドによるとsetコマンドでセットしようとするとき$1からしかセットできないから、ということで BASH_ARGV0を使うと$0もセットできる、ということがあるみたいです。

また、builtin機能として、rmstatfdflagsseqが加わりました。

d. New loadable builtins: rm, stat, fdflags.

nn. There is a new `seq’ loadable builtin.

時期的に別だったのかseqだけ別扱い。

rmなどの枯れたコマンドはBashのビルトインになっていた方が GNU/BSDの違いなども出てこなくなるのでやりやすくはなるかな、と思います。 ただ、Zshとの関係を考えると逆に微妙なのかも。

まあいずれにしろそれほど複雑な事をするコマンドではないので互換性とかは問題にはならないと思います。

単にビルトインになった方が呼び出しが高速なので使い勝手は良くなるはずです。

あとは、

a. The `wait’ builtin can now wait for the last process substitution created.

j. The wait' builtin now has a -f’ option, which signfies to wait until the specified job or process terminates, instead of waiting until it changes state.

この辺のwaitコマンドに関するアップデートや

g. `history -d’ understands negative arguments: negative arguments offset from the end of the history list.

t. The history' builtin can now delete ranges of history entries using -d start-end’.

historyコマンドに関するアップデートなど、便利に使うことが出来るかもしれません。

最後に

a. Non-incremental vi-mode search (N', n’) can search for a shell pattern, as Posix specifies (uses fnmatch(3) if available).

vi-modeがちょっとだけ便利に。

Sponsored Links
  1. Mac(BSD)だとdate%NをサポートしてないのでHomebrewでcoreutilsを入れてgdateを使うか 他のプログラムでチェックする必要があります。

Sponsored Links

« Gitのレポジトリに鍵を登録するとそのサーバーのすべてのパブリックレポジトリにアクセスできる様になる Python Fireで簡単にサブコマンド付きのコマンドラインツールを作る »

}