なぜ `bash -c 'echo $0'' は「bash」を印刷するのですか?

なぜ `bash -c 'echo $0'' は「bash」を印刷するのですか?
$ bash -c 'echo $0 ' foo 
foo

$ bash -c 'echo $0 '  
bash

バッシュマニュアルから

($ 0)はシェルまたはシェルスクリプトの名前に展開されます。これはシェルが初期化されるときに設定されます。

Bashがコマンドファイルを使用して呼び出されると(39ページのセクション3.8「シェルスクリプト」を参照)、$ 0がファイル名に設定されます。

Bashが-cオプションで始まる場合(80ページのセクション6.1 [Bash呼び出し]を参照)、$ 0は次のように設定されます。実行する文字列の後の最初のパラメータ、誰かがあれば。

そうでなければ、引数0で指定されたBashを呼び出すために使用されるファイル名に設定されます。

「そうでなければ」とはどういう意味ですか?

どのような場合が含まれますか?

「実行する文字列の後の引数」なしで-cでbashを起動する場合も含まれますか?

bash -c 'echo $0 '引用の2番目のケースによると、何も出力されないと予想しましたbash

ありがとうございます。

ベストアンサー1

引用した文書には3つのケースがあります。

bashコマンドファイルを使用して呼び出すと、$0ファイル名に設定されます。

(ケース1)

bashoptionで始まる場合は、実行する文字列(存在する場合)の後の最初の引数に設定されます-c$0

(ケース2; 2つの「if」に注意してください。この場合、両方を満たす必要があります。)

bashそれ以外の場合は、引数0で指定された呼び出しに使用されるファイル名に設定されます。

(ケース3)。

「otherwise」句は、ケース1と2に含まれていないすべてのケースを扱います。つまり、bashコマンドファイルとともに呼び出されない、オプションbashで始まらない-c、またはオプションで始まるが後に引数が出ない-c実行される文字列です。

-cはい、実行する文字列の後に引数なしでBashを起動することを含みます。また、インタラクティブシェルはコマンドファイルやオプションなしで起動されるecho $0可能性が高いため、インタラクティブシェルで実行する際の基本的なケースもカバーしています。-c

おすすめ記事