Wie erstelle ich ein Verzeichnis mit dem Namen '-p' unter Linux mit Bash? [Duplikat]


22

Wie kann ich in Bash ein Verzeichnis mit dem Namen erstellen -p?

mkdir -pgescheitert.
mkdir "-p"gescheitert.
mkdir "\-p"gescheitert.
mkdir \-pgescheitert.


1
Beachten Sie, dass diese alle versuchen, den Parameter für bash zu umgehen. Da es das gleiche ist, das als nicht escaped ausgegeben wird, senden alle diese außer dem dritten nur den String "-p" an mkdir, der ihn als Option parst. Das Parsing von Optionen wird nicht in bash durchgeführt, daher ist jede Möglichkeit, dies zu umgehen (beschrieben in den Antworten unten), ein Merkmal von mkdir (oder besser gesagt, ein Mangel an Fehlern).
Score_Under

11
Ich muss fragen, warum Sie ein solches Verzeichnis wollen. Es wäre eine PITA zu benutzen.
Daniel R Hicks

3
@DanielRHicks: Ich habe diesen Ordner versehentlich erstellt, weiß aber nicht, wie ich ihn löschen soll.
Jichao

4
Sollte die Frage dann nicht lauten "Wie lösche ich ein Verzeichnis mit dem Namen '-p' unter Linux mit Bash"?
Chepner

@chepner: Weil sie eigentlich die gleichen Probleme sind. Ich habe versucht, das Verzeichnis mit zu löschen, bin rmdirjedoch mit denselben Fehlern fehlgeschlagen.
Jichao

Antworten:


40

Die meisten Dienstprogramme (mit Ausnahme von testund alle POSIX-kompatiblen echo) unterstützen die Option "Ende der Optionen" -- , sodass Sie Folgendes ausführen können:

mkdir -- -p

Dies ist besonders nützlich, wenn Sie Dateien umbenennen oder entfernen, die möglicherweise mit einem Bindestrich beginnen. In Skripten sollten Sie immer verwenden

mv -- "$filename"

anstelle eines einfachen mv "$filename"oder noch schlimmer eines nicht zitierten Dateinamens.


3
Genial. Das ist wirklich gut zu wissen
Bruno9779

18

mkdir ./-p

Denken Sie daran, dass die meisten anderen Programme denselben "Trick" verwenden müssten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.