$ 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)
bash
optionで始まる場合は、実行する文字列(存在する場合)の後の最初の引数に設定されます-c
。$0
(ケース2; 2つの「if」に注意してください。この場合、両方を満たす必要があります。)
bash
それ以外の場合は、引数0で指定された呼び出しに使用されるファイル名に設定されます。
(ケース3)。
「otherwise」句は、ケース1と2に含まれていないすべてのケースを扱います。つまり、bash
コマンドファイルとともに呼び出されない、オプションbash
で始まらない-c
、またはオプションで始まるが後に引数が出ない-c
実行される文字列です。
-c
はい、実行する文字列の後に引数なしでBashを起動することを含みます。また、インタラクティブシェルはコマンドファイルやオプションなしで起動されるecho $0
可能性が高いため、インタラクティブシェルで実行する際の基本的なケースもカバーしています。-c