setの出力をぼんやり眺めていたら"_"が変数になっているのを見つけた。
意味はdashのmanには書いてないがbashのには書いてあり、多分同じ意味だと思われる。
_
シェルの起動時には、環境または引き数リストで渡された、 実行するシェルまたはシェルスクリプトの絶対パス名が設定されます。 その後では、直前のコマンドに対する最後の引き数 (展開後のもの) に展開されます。 また、実行する各コマンドの完全なパス名が設定され、 そのコマンドの環境にエクスポートされます。 メールをチェックするときには、 このパラメータは現在チェックしているメールファイル名を保持します。
最後に実行したコマンドの最後の引数だと思っておく。
何に使うの?
端末上のコピペを減らせる、くらいしか見つからなかった。
$ mkdir tmp
$ cd $_
$ cp ../tmpfile ./tmpfile_cp
$ vim $_
微妙すぎる。
readの参照しない変数名に使ってみる
どうせ参照しないのでなんでも良いのに、参照しないことが分からないとならず、
名前を与えると無意味に場所を取る。こういう変数は"_"にすると、スッキリするかもしれない。
... | while read dummy1 dummy2 field3 dummies ; do
# 読みづらい
... | while read _ _ field3 _ ; do
# スッキリ
参照しようとしてもできない。
$ echo a | { read _; echo $_; }
_
なお、bashのmanには以下の記載があるため、代入はしないほうが良いのかもしれない。
シェルはいくつかのパラメータを特別扱いします。 このようなパラメータは参照されるだけであり、 値を代入することは許されません。