Ergänzung der bestehenden, hilfreichen Antworten; Tipp an den QZ-Support für die Ermutigung, eine separate Antwort zu veröffentlichen:
Hier kommen zwei unterschiedliche Mechanismen ins Spiel:
(a) ob cut selbst das an die -dOption übergebene Trennzeichen (in diesem Fall Leerzeichen) ein separates Argument sein muss oder ob es akzeptabel ist, es direkt an dieses anzuhängen-d .
(b) wie die Shell im Allgemeinen Argumente analysiert, bevor sie an den aufgerufenen Befehl übergeben werden.
(a) wird durch ein Zitat aus den POSIX-Richtlinien für Versorgungsunternehmen beantwortet (Schwerpunkt Mine)
Wenn die Zusammenfassung eines Standard - Dienstprogramm zeigt eine Option mit einem obligatorischen Option-Argumente [...] eine konforme Anwendung verwenden soll getrennte Argumente für diese Option und das Option-Argument . Eine konforme Implementierung muss es Anwendungen jedoch auch ermöglichen, die Option und das Optionsargument in derselben Argumentzeichenfolge ohne dazwischenliegende Zeichen anzugeben .
Mit anderen Worten: In diesem Fall , weil -d‚s - Option-Argument ist zwingend erforderlich , können Sie wählen , ob das Trennzeichen festlegen , wie :
- (s) Entweder: ein separates Argument
- (d) OR: als Wert direkt befestigt an
-d .
Sobald Sie (s) oder (d) ausgewählt haben, ist es das String-Literal-Parsing der Shell - (b) -, das zählt:
Die Äquivalenz wird durch die Schale erklärt String-Literal-Verarbeitung :
Alle oben genannten Lösungen führen zu genau der gleichen Zeichenfolge (in jeder Gruppe), wenn cutsie angezeigt werden :
(s) : cutsieht -dals eigenes Argument ein separates Argument, das ein Leerzeichen enthält - ohne Anführungszeichen oder \Präfix!.
(d) : cutsieht -d plus ein Leerzeichen - ohne Anführungszeichen oder \Präfix! - als Teil des gleichen Arguments.
Der Grund, warum die Formen in den jeweiligen Gruppen letztendlich identisch sind, ist zweifach, basierend darauf, wie die Shell String-Literale analysiert :
- Die Schale ermöglicht Literal spezifiziert werden wie durch einen Mechanismus genannt zitieren , die annehmen kann mehrere Formen :
- Zeichenfolgen in einfachen Anführungszeichen : Der Inhalt
'...'wird wörtlich genommen und bildet ein einzelnes Argument
- Zeichenfolgen in doppelten Anführungszeichen : Der Inhalt im Inneren
"..."bildet ebenfalls ein einzelnes Argument, unterliegt jedoch der Interpolation (erweitert Variablenreferenzen wie $varBefehlssubstitutionen ( $(...)oder `...`) oder arithmetische Erweiterungen ( $(( ... ))).
\-Zitieren einzelner Zeichen : Ein \vorangestelltes einzelnes Zeichen bewirkt, dass dieses Zeichen als Literal interpretiert wird.
- Zitiert durch ergänzt Zitat Entfernung , was bedeutet , dass , sobald die Schale eine Befehlszeile analysiert hat, es entfernt die Anführungszeichen aus den Argumenten (umschließenden
'...'oder "..."oder \Instanzen) - also der Befehl Wesen aufgerufen nie die Anführungszeichen sieht .