Habituellement, $0dans un script est défini sur le nom du script, ou sur ce qu'il a été appelé (y compris le chemin d'accès). Cependant, si j'utilise bashavec l' -coption, $0est défini sur le premier des arguments passés après la chaîne de commande:
bash -c 'echo $0 ' foo bar
# foo
En effet, il semble que les paramètres de position aient été décalés, mais y compris $0. Cependant, shiftdans la chaîne de commande n'affecte pas $0(comme d'habitude):
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
Pourquoi ce comportement apparemment étrange pour les chaînes de commande? Notez que je cherche la raison, la raison d'être de la mise en œuvre d'un tel comportement étrange.
On pourrait supposer qu'une telle chaîne de commande n'aurait pas besoin du $0paramètre tel qu'il est généralement défini, donc pour l'économie, il est également utilisé pour les arguments normaux. Cependant, dans ce cas, le comportement de shiftest étrange. Une autre possibilité est celle qui $0est utilisée pour définir le comportement des programmes (a la bashappelé as shou vimappelé as vi), mais cela ne peut pas l'être, car $0ici, on ne le voit que dans la chaîne de commande et non par les programmes appelés à l'intérieur. Je ne peux penser à aucune autre utilisation $0, donc je ne peux pas l'expliquer.
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *, bien que, malheureusement, ce ne $0soit généralement pas un paramètre définissable avec l' -soption tream ... Il peut être utilisé de nombreuses manières xargsgénéralement, cependant. Et d'autres d'ailleurs.
--, alors cela aurait pu avoir l'interprétation habituelle de "d'ici commence les arguments", vu dans certains autres programmes. Là encore, cela pourrait confondre ceux qui ne sont pas familiers avec l' -cidée de --réellement avoir cette interprétation.
-pour l'$0argument comme un idiome, comme danssh -c 'foo $1 $2' - a b. De cette façon, cela semble assez normal (une fois que vous avez découvert ce que cela-signifie, c'est-à-dire)