UNIX系OSでシェルからenvコマンドを引数なしで実行した場合に、_=/usr/bin/envといったように"_"という環境変数の値が表示されますが、この環境変数の意味や利用の仕方を教えてください。実際に環境変数として参照できることとenvコマンドのパスを示しているらしいということしかわからず、ずっと気になっています。よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/02/07 15:30:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント35pt

とりあえず、bash での扱いに関しては記述が見つかりました。

Bash Reference Manual

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 のシェルなら必ずそうなのか?」は、ちょっと証拠が見つかっていません。

id:suginoy

>「bash が外部コマンドを呼び出したときの $_ にそのフルパスをセットする」

なるほど。アプリケーションからファイルパスを参照する時は、シェルでpwdやbasenameから作った値をexportしたのを受け取るというコーディングをしていました。

>「UNIX 系 OS のシェルなら必ずそうなのか?」

HP-UXのkshでもそうだったので、Bシェル系統は同様ではないかと考えていました。bashの機能ということであれば、他のシェルでどうかということは特に気にしません。

ありがとうございます。

2011/01/31 18:05:40
id:mjy No.2

回答回数70ベストアンサー獲得回数22

ポイント35pt

これは 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...)

id:suginoy

試してみると、確かに思わぬ値が得られますね。

Mac OSでターミナル起動直後だと'PATH'と表示されるのがよくわかりませんでしたが。

直前のコマンドに引数がないとコマンド自身がセットされるみたいですね。

他の特殊パラメータに比べて扱いが難しそうです。

回答ありがとうございます。

2011/02/02 17:44:31
  • id:JULY
    ksh にはあるようです。

    http://www2.research.att.com/sw/download/man/man1/ksh.html

    上記ページの「Parameter Expansion」ので

     The following parameters are automatically set by the shell:

    と書かれている行の下に、「_」に関する記述があります。

    UNIX 系 OS のシェルなら必ずあるか? は、どうやら、必ずあるわけではなさそうです。

    http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_05_02

    上記ページは特定のシェルに依存しない話を書いていますが、「Special Parameters」に
    「_」の話が出てこないところを見ると、シェル依存のように思えます。
  • id:JULY
    > 「bash が外部コマンドを呼び出したときの $_ にそのフルパスをセットする」

    日本語が変でしたね(^^;。

    「bash が外部コマンドを呼び出したときに、そのコマンドのフルパスを $_ にセットする」

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません