とりあえず、bash での扱いに関しては記述が見つかりました。
When Bash invokes an external command, the variable ‘$_’ is set to the full path name of the command and passed to that command in its environment.
「bash が外部コマンドを呼び出したときの $_ にそのフルパスをセットする」という事です。
他のシェルでも同様だと思うのですが、「UNIX 系 OS のシェルなら必ずそうなのか?」は、ちょっと証拠が見つかっていません。
これは bash の機能です。
Unix系OSであっても bash 以外のシェルであればこの機能はないかもしれません。
ですので $_ を使うのは bash スクリプトか、bash スクリプトから呼びだされることが分かっているコマンドだけにするべきでしょう。
スクリプト起動直後に $_ を使えば、自分が起動された際の絶対ファイル名を得ることができます。
他にもいくつか機能があり、それらを把握していないと $_ を参照するタイミングによって、思わぬ値が得られてしまいます。
詳しくは、bash のマニュアル(http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html)の以下の項を参照して下さい。
特殊パラメータ(http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbA...)
環境(http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbB...)
試してみると、確かに思わぬ値が得られますね。
Mac OSでターミナル起動直後だと'PATH'と表示されるのがよくわかりませんでしたが。
直前のコマンドに引数がないとコマンド自身がセットされるみたいですね。
他の特殊パラメータに比べて扱いが難しそうです。
回答ありがとうございます。
>「bash が外部コマンドを呼び出したときの $_ にそのフルパスをセットする」
なるほど。アプリケーションからファイルパスを参照する時は、シェルでpwdやbasenameから作った値をexportしたのを受け取るというコーディングをしていました。
>「UNIX 系 OS のシェルなら必ずそうなのか?」
HP-UXのkshでもそうだったので、Bシェル系統は同様ではないかと考えていました。bashの機能ということであれば、他のシェルでどうかということは特に気にしません。
ありがとうございます。