Bash 5.0.0
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で参照出来ていたものであまり使いみちが分かりません。
このRedditのスレッドによるとset
コマンドでセットしようとするとき$1
からしかセットできないから、ということで
BASH_ARGV0を使うと$0
もセットできる、ということがあるみたいです。
また、builtin機能として、rm
、stat
、fdflags
、seq
が加わりました。
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がちょっとだけ便利に。
-
Mac(BSD)だと
date
は%N
をサポートしてないのでHomebrewでcoreutils
を入れてgdate
を使うか 他のプログラムでチェックする必要があります。 ↩