In der Regel wird $0
in einem Skript der Name des Skripts oder der Name des aufgerufenen Skripts (einschließlich des Pfads) festgelegt. Wenn ich jedoch bash
mit der -c
Option verwende, $0
wird 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 shift
in 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 $0
normalerweise 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 shift
jedoch ungerade. Eine andere Möglichkeit besteht $0
darin, das Verhalten von Programmen zu definieren (a la bash
aufgerufen als sh
oder vim
aufgerufen als vi
), aber das kann nicht sein, da dies $0
nur 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 $0
generell keinen einstellbaren Parameter mit der -s
Option tream angeben ... Sie kann jedoch auf viele der gleichen Arten verwendet werden, wie dies xargs
generell 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 -c
dem Gedanken vertraut sind , dass --
tatsächlich diese Interpretation vorliegt.
-
für das$0
Argument 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)