人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: suginoy
●カテゴリ:コンピュータ インターネット
✍キーワード:Unix系OS コマンド シェル パス 引数
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● JULY
●35ポイント

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

◎質問者からの返答

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

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

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

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

ありがとうございます。


2 ● mjy
●35ポイント

これは 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'と表示されるのがよくわかりませんでしたが。

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ