$_
Bashマニュアルの次の文章、特に太字の部分を説明してください。いくつかの例を挙げてください。
シェルが起動したら、シェルまたは実行中のシェルスクリプトを呼び出すために使用される絶対パス名に設定します。環境またはパラメータリストを渡す。
その後、前のコマンドの最後のパラメータに展開されます。
また、フルパス名に設定されます。実行された各コマンドを呼び出すために使用されます。そしてコマンドでエクスポートされた環境にデプロイ。
いつメール確認中、このパラメータはメールファイルの名前を保存します。
ベストアンサー1
私はそれが明確ではないことに同意します。
1. シェルが起動すると、
変数が受信した
_
環境にある場合bash
、bash
未変更のままです。特に、シェルが
bash
他のシェルによって呼び出される場合(一部の実装ではそうです)、シェルは環境変数を実行中のコマンドのパスに設定します(質問の3番目のポイント)。たとえば、他のシェル解析の結果としてスクリプトを解析するためにifを呼び出すと、次のようになります。bash
zsh
yash
ksh
bash
_
bash
bash
bash-script some args
これは、スクリプトを解釈するシェル変数の初期値である環境に
bash
渡されます。_=/path/to/bash-scrip
bash-script
$_
bash
bash
$ env -i _=whatever bash -c 'echo "$_"' whatever
今、呼び出しアプリケーションが
_
環境変数を渡さない場合、呼び出されたシェルはそれを受け取るとそれ自体でbash
初期化されます。これは、または、または他のものです(上記の例では、スクリプトのshe-bang$_
argv[0]
bash
/path/to/bash
/path/to/some-script
/bin/bash
#! /bin/bash
/path/to/bash-script
システムによって異なる)。bash
したがって、このテキストは呼び出し元が制御できない動作を説明するため、誤解を招く可能性があります。呼び出しアプリケーションがこれをまったく設定しないか(実際には一部のシェルと一部のまれな対話型アプリケーションでのみこれを実行します。たとえば、設定しない)、まったく異なる目的で使用できます(たとえば、bash
に設定)。$_
execlp()
ksh93
*pid*/path/to/command
$ env bash -c 'echo "$_"' /usr/bin/env (env did not set it to /bin/bash, so the value we get is the one passed to env by my interactive shell) $ ksh93 -c 'bash -c "echo \$_"' *20042*/bin/bash
2. 以後
これその後それほど明確ではありません。実際に一度bash
説明すると簡単なコマンド現在のシェル環境で。
対話型シェルの場合
/etc/bash.bashrc
これは、例えば、説明された最初の単純なコマンドです。たとえば、対話型シェルプロンプトで次のようにします。
$ echo "$_" ] (the last arg of the last command from my ~/.bashrc) $ f() { echo test; } $ echo "$_" ] (the command-line before had no simple command, so we get the last argument of that previous echo commandline) $ (: test) $ echo "$_" ] (simple command, but in a sub-shell environment) $ : test $ echo "$_" test
非対話型シェルの場合
$BASH_ENV
、設定されていない場合は、そのシェルのコードに入力された最初のコマンドになります。$BASH_ENV
3. Bashがコマンドを実行するとき
3番目のポイントは異なり、上記の議論で示唆されています。
bash
_
他のシェルと同様に、システムコールの最初の引数として使用されるパスを含む環境変数を実行するコマンドに渡します。bash
execve()
$ env | grep '^_'
_=/usr/bin/env
4. メール確認時
4番目の項目は変数の説明で詳しく説明されていますMAILPATH
。
「メールパス」
コロンで区切られたリストシェルは定期的に新しいメールのファイル名を解決します。。
各リスト項目を指定できます。メールファイルに新しいメールが届くと印刷されるメッセージファイル名とメッセージを「?」で区切ってメッセージテキストに使用すると、「$_」は現在のメールファイルの名前に展開されます。
例:
$ MAILCHECK=1 MAILPATH='/tmp/a?New mail in <$_>' bash
bash$ echo test >> /tmp/a
New mail in </tmp/a>