1. シェルが起動すると、

1. シェルが起動すると、

$_Bashマニュアルの次の文章、特に太字の部分を説明してください。いくつかの例を挙げてください。

  1. シェルが起動したら、シェルまたは実行中のシェルスクリプトを呼び出すために使用される絶対パス名に設定します。環境またはパラメータリストを渡す

  2. その後、前のコマンドの最後のパラメータに展開されます。

  3. また、フルパス名に設定されます。実行された各コマンドを呼び出すために使用されます。そしてコマンドでエクスポートされた環境にデプロイ

  4. いつメール確認中、このパラメータはメールファイルの名前を保存します。

ベストアンサー1

私はそれが明確ではないことに同意します。

1. シェルが起動すると、

  • 変数が受信した_環境にある場合bashbash未変更のままです。

    特に、シェルがbash他のシェルによって呼び出される場合(一部の実装ではそうです)、シェルは環境変数を実行中のコマンドのパスに設定します(質問の3番目のポイント)。たとえば、他のシェル解析の結果としてスクリプトを解析するためにifを呼び出すと、次のようになります。bashzshyashkshbash_bashbash

    bash-script some args
    

    これは、スクリプトを解釈するシェル変数の初期値である環境にbash渡されます。_=/path/to/bash-scripbash-script$_ bashbash

    $ 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_他のシェルと同様に、システムコールの最初の引数として使用されるパスを含む環境変数を実行するコマンドに渡します。bashexecve()

$ 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>

おすすめ記事