Ich habe mich gefragt, wie ich eine Datei mit dem Namen "Flag" erstellen soll. Wenn ich beispielsweise einen Ordner mit dem Namen "Folder" erstellen -a
möchte, welche Befehle reichen aus?
Ich habe versucht mkdir '-a'
, mkdir \-a
und weder gearbeitet. Ich bin auf Ubuntu.
linux
ubuntu
command-line-arguments
MEIN V
quelle
quelle
Antworten:
Rufen Sie den Befehl wie folgt auf:
Das
--
bedeutet, dass die Optionen danach enden, das-a
wird also wörtlich interpretiert und nicht als Option dazumkdir
. Sie finden diese Syntax nicht nur inmkdir
, sondern in jedem POSIX-kompatiblen Dienstprogramm mit Ausnahme vonecho
undtest
. Aus der Spezifikation :Die Verwendung
--
als Sicherheitsmaßnahme wird für fast alle Aktionen empfohlen, bei denen Sie sich mit Dateinamen befassen und sicherstellen möchten, dass sie den Befehl nicht unterbrechen. Wenn Sie z. B. Dateien in einer Schleife verschieben, möchten Sie möglicherweise Folgendes aufrufen, damit eine Datei mit dem Namen-i
isn ' t (in?) als Option richtig geparst:quelle
cc -o -myfile -Wall -myfile.c
als nur wenig erfundenes Beispiel. Jeder Editor, der es wert ist, sollte in der Lage sein, in einer Datei mit dem Namen zu speichern,-myfile.c
wenn Sie danach fragen, aber der C-Compiler wird wahrscheinlich nicht das tun, was Sie wollen, wenn er eine solche Liste von Optionen erhält.cc
Befehl, den Michael oben gegeben hat, mit der-o
Option, die Ausgabedatei anzugeben.for f in ./*; do...
anstattfor f in *; do...
Die einfachste Möglichkeit, mit einem vernünftigen Programm zu arbeiten, ist die Verwendung eines relativen Pfadnamens vor dem
-
, z. B.mkdir ./-a
wird ein Verzeichnis erstellt, das-a
im aktuellen Arbeitsverzeichnis aufgerufen wird .Das häufigste Beispiel für die Verwendung dieses "Tricks" ist das Entfernen einer Datei, die mit einem Bindestrich beginnt
rm ./-a
.quelle
./
immer eine gute Idee - stellen Sie sich vor, Sie haben eine Datei mit dem Namen erstellt-rf
und dann mit dem Namenrm *
.--
wird nicht von allen Befehlen verstanden, nur von wenigen)--
war eine Bash-Sache, also sollte es für alle Programme funktionieren?Der Grund, warum
mkdir '-a'
odermkdir \-a
nicht funktioniert, ist, dass beide Methoden (mit Anführungszeichen oder Backslashes) verwendet werden, um zu verhindern, dass Ihre Shell (wahrscheinlichbash
) ihnen eine besondere Bedeutung verleiht. Schon seit-a
die Shell ohnehin nichts Besonderes bedeutet, haben diese keinen Einfluss darauf, wie sie weitergeleitet wirdmkdir
.Soweit
mkdir
es sich um etwas handelt, erhält es eine Liste von Argumenten aus der Shell, und es kann nicht sagen, ob Sie sie in Anführungszeichen setzen oder ob es einen Backslash gab. Es gibt nur ein Argument-a
. Deshalb brauchst du das--
wie in den anderen Antworten erklärt.quelle
Neben der Antwort von "slhck" gibt es noch einen anderen Trick, der manchmal funktioniert:
Setzen Sie den fraglichen Dateinamen in 2 Sätze von (verschiedenen) qoutes wie
"'-a'"
oder'"-a"'
.Ob dies funktioniert oder nicht, hängt vom Programm ab. Es ist jedoch ein letzter Ausweg, wenn das Programm die POSIX-
--
Funktion nicht unterstützt .Die POSIX-Methode wird immer bevorzugt, da sie zu 100% zuverlässig ist.
quelle
--
um die Optionsverarbeitung zu beenden, setzt auch voraus, dass Sie keine Optionen benötigen, um dem Dateinamen zu folgen, was nicht immer der Fall ist.'-a'
oder erstellt"-a"
, zumindest auf BSD-Systemen