Как создать каталог с именем '-p' в Linux с помощью Bash? [Дубликат]

22

В Bash, как я могу создать каталог с именем -p?

mkdir -pне удалось.
mkdir "-p"не удалось.
mkdir "\-p"не удалось.
mkdir \-pне удалось.

Jichao
источник
1
Обратите внимание, что все они пытаются экранировать параметр для bash. Так как он экранирован так же, как и не экранированный, все они, кроме третьего, просто отправят строку «-p» в mkdir, который будет анализировать ее как опцию. Синтаксический анализ параметров в bash не выполняется, поэтому любой способ обойти это (описанный в ответах ниже) является функцией mkdir (или, скорее, отсутствием ошибки).
Score_Under
11
Должен спросить, почему вы хотите такой каталог. Это было бы PITA для использования.
Даниэль Р Хикс
3
@DanielRHicks: я создал эту папку по ошибке, но не знаю, как ее удалить.
Jichao
4
Не должен ли тогда быть вопрос "Как удалить каталог с именем '-p' в Linux с помощью Bash"?
chepner
@chepner: Потому что на самом деле это одни и те же проблемы. Я пытался удалить каталог с, rmdirно не с теми же ошибками.
Джичао

Ответы:

40

Большинство утилит (все POSIX-совместимые, кроме testи echo) поддерживают опцию «end of options» -- , поэтому вы можете запустить:

mkdir -- -p

Это особенно полезно при переименовании или удалении файлов, которые потенциально могут начинаться с тире. В скриптах вы всегда должны использовать

mv -- "$filename"

вместо простого mv "$filename"или, что еще хуже, без кавычек имя файла.

slhck
источник
3
Потрясающе. Это действительно полезно знать
Bruno9779
18

mkdir ./-p

Имейте в виду, что большинство других программ должны будут использовать тот же «трюк».

Даниэль Б
источник