Was ist der Unterschied zwischen --param="value" und "--param=value"?

Was ist der Unterschied zwischen --param="value" und "--param=value"?

In der Vergangenheit habe ich Folgendes gelesen (ich kann mich nicht an die Quelle erinnern):

./script --param="value"

kann zu anderen Ergebnissen führen als:

./script "--param=value"

und dass Sie aufgrund dieser Unterschiede (die beim Wechseln von Systemen/Betriebssystemen/Distributionen/Shells sichtbar werden können) immer Folgendes tun sollten --param="value". Das heißt, tun Sie das, was ich „spätes Anführen“ nenne (setzen Sie die Anführungszeichen um den nachfolgenden Teil oder die minimale Teilmenge; zitieren Sie nicht das Ganze).

Ich habe auch Leute gesehen, die dies tun, wenn sie Variablen ändern (d. h. PATH=/bar:"$PATH"im Vergleich zu PATH="/bar:$PATH"). Generell würde ich sagen, dass nach dem, was ich andere tun gesehen habe, „spätes Zitieren“ häufiger vorkommt als das Zitieren des gesamten Textes.

Meine Frage lautet: Gibt es tatsächlich einen möglichen Unterschied zwischen --param="value"und "--param=value"? Wenn ich etwas zitieren muss, besteht dann tatsächlich ein Unterschied zwischen dem Zitieren nur eines Teils und dem Zitieren des gesamten Textes?

Ich neige dazu, --param="value"eher zu verwenden als "--param=value"zu verwenden, aber ich tue es hauptsächlich, weil ich denke, dass es gedanklich einfacher zu analysieren ist, und nicht, weil mir irgendwelche technischen Unterschiede bewusst sind.

Antwort1

Es gibt keinen Unterschied, zumindest nicht in den von Ihnen genannten Fällen. Die Shell entfernt die "Zeichen und das Endergebnis ist dasselbe. Um Probleme mit Shell-Anführungszeichen zu beheben, verwende ich manchmal ein einfaches Programm, das nur sein argv ausgibt. Zum Beispiel:

$ printargs --param="value"
argv[0] = printargs
argv[1] = --param=value

$ printargs "--param=value"
argv[0] = printargs
argv[1] = --param=value

Hier ist der Code als Referenz:

#include <stdio.h>

int main(int argc, char** argv)
{
    int i;
    for (i = 0; i < argc; ++i) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
    return 0;
}

verwandte Informationen