In der Regel wird $0in einem Skript der Name des Skripts oder der Name des aufgerufenen Skripts (einschließlich des Pfads) festgelegt. Wenn ich jedoch bashmit der -cOption verwende, $0wird auf das erste der nach der Befehlszeichenfolge übergebenen Argumente gesetzt:
bash -c 'echo $0 ' foo bar
# foo
In der Tat scheint es, dass Positionsparameter verschoben wurden, aber einschließlich $0. Jedoch shiftin der Befehlsfolge wirkt sich nicht aus $0(wie normal):
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
Warum dieses anscheinend merkwürdige Verhalten für Befehlszeichenfolgen? Beachten Sie, dass ich nach dem Grund und der Begründung für die Implementierung eines solchen merkwürdigen Verhaltens suche.
Man könnte spekulieren, dass ein solcher Befehlsstring den $0normalerweise definierten Parameter nicht benötigt , so dass er aus Sparsamkeitsgründen auch für normale Argumente verwendet wird. In diesem Fall ist das Verhalten von shiftjedoch ungerade. Eine andere Möglichkeit besteht $0darin, das Verhalten von Programmen zu definieren (a la bashaufgerufen als shoder vimaufgerufen als vi), aber das kann nicht sein, da dies $0nur in der Befehlszeichenfolge und nicht von Programmen gesehen wird, die in dieser aufgerufen werden. Ich kann mir keinen anderen Verwendungszweck vorstellen $0, daher bin ich ratlos, dies zu erklären.
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *aber leider auch $0generell keinen einstellbaren Parameter mit der -sOption tream angeben ... Sie kann jedoch auf viele der gleichen Arten verwendet werden, wie dies xargsgenerell der Fall ist. Und noch andere.
--, das hätte die übliche Interpretation von "Ab hier fängt die Argumente an" haben können, die man in einigen anderen Programmen sieht. Andererseits könnte das diejenigen verwirren, die nicht mit -cdem Gedanken vertraut sind , dass --tatsächlich diese Interpretation vorliegt.
-für das$0Argument als eine Redewendung gesehen, wie insh -c 'foo $1 $2' - a b. Auf diese Weise sieht es ziemlich normal aus (wenn Sie herausgefunden haben, was das-bedeutet)