Rufen Sie den Befehl folgendermaßen auf:
mkdir -- -a
Der --
bedeutet, dass die Optionen danach enden, also die -a
wird wörtlich interpretiert und nicht als Option zu mkdir
. Diese Syntax finden Sie nicht nur in mkdir
, aber jedes POSIX-kompatible Dienstprogramm außer echo
und test
. Aus der Spezifikation:
Das Argument -- sollte als Trennzeichen akzeptiert werden, das das Ende von Optionen angibt. Alle folgenden Argumente sollten als Operanden behandelt werden, auch wenn sie mit dem Zeichen „-“ beginnen. Das Argument -- sollte nicht als Option oder als Operand verwendet werden.
Mit --
als Schutz wird für fast alle Aktionen empfohlen, bei denen Sie mit Dateinamen umgehen und sicherstellen möchten, dass sie den Befehl nicht unterbrechen, z. Wenn Sie Dateien in einer Schleife verschieben, möchten Sie vielleicht Folgendes aufrufen, damit eine Datei mit dem Namen -i
wird nicht (in?)korrekt als Option geparst:
mv -- "$f" new-"$f"
Der einfachste Weg, der mit jedem vernünftigen Programm funktionieren sollte, ist die Verwendung eines relativen Pfadnamens vor dem -
, z.B. mkdir ./-a
erstellt ein Verzeichnis namens -a
im aktuellen Arbeitsverzeichnis.
Das häufigste Beispiel für die Verwendung dieses "Tricks" ist, wenn Sie eine Datei entfernen möchten, die mit einem Bindestrich beginnt, also können Sie rm ./-a
tun .
Der Grund, warum mkdir '-a'
, oder mkdir \-a
nicht funktioniert, liegt daran, dass diese beiden Methoden (mit Anführungszeichen oder umgekehrten Schrägstrichen) verwendet werden, um Ihre Shell zu verhindern (wahrscheinlich bash
) daran hindern, ihnen eine besondere Bedeutung zu geben. Seit -a
ohnehin nichts Besonderes für die Shell, diese haben keinen Einfluss darauf, wie sie an mkdir
weitergegeben wird .
Bis zu mkdir
In diesem Fall erhält es eine Liste mit Argumenten von der Shell und kann nicht feststellen, ob Sie sie in Anführungszeichen gesetzt haben oder ob ein umgekehrter Schrägstrich vorhanden war. Es sieht nur ein Argument -a
. Deshalb brauchen Sie den --
wie in den anderen Antworten erklärt.