通常、$0スクリプト内では、スクリプトの名前、またはそれが呼び出されたもの(パスを含む)に設定されます。ただし、オプションで使用bashする場合は、コマンド文字列の後に渡される引数の最初に設定されます。-c$0
bash -c 'echo $0 ' foo bar
# foo
実際には、位置パラメータはシフトされているように見えますが、が含まれてい$0ます。ただしshift、コマンド文字列では$0(通常どおり)影響を受けません。
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
コマンド文字列のこの奇妙な動作はなぜですか?このような奇妙な動作を実装する背後にある理由、理論的根拠を探していることに注意してください。
そのようなコマンド文字列は$0通常定義されたパラメータを必要としないと推測できるため、経済のために通常の引数にも使用されます。ただし、その場合、の動作shiftは奇妙です。別の可能性は$0、プログラムの動作を定義するために使用される(bashas shまたはvimas と呼ばれるla vi)が、$0ここではコマンド文字列でのみ表示され、その中で呼び出されるプログラムでは表示されないためです。の他の用途は考えられない$0ので、これを説明するのに途方に暮れています。
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *、しかし、残念ながら、$0一般的で設定可能なパラメータではない-streamオプション...同じ方法の多くで使用することができxargs、一般的に、しかし、です。他にも。
--、他のプログラムで見られる「ここから引数を開始する」という通常の解釈ができたはずです。繰り返しますが、それは、慣れていない人が実際にその解釈を持っている-cと考えるのを混乱させる可能性があります--。
-ため$0のように、イディオムなどの引数をsh -c 'foo $1 $2' - a b。このように、それはかなり普通に見えます(あなたがそれが何を-意味するかを知ったら、つまり)