Обратите внимание, что все они пытаются экранировать параметр для 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"или, что еще хуже, без кавычек имя файла.
rmdir
но не с теми же ошибками.Ответы:
Большинство утилит (все POSIX-совместимые, кроме
test
иecho
) поддерживают опцию «end of options»--
, поэтому вы можете запустить:Это особенно полезно при переименовании или удалении файлов, которые потенциально могут начинаться с тире. В скриптах вы всегда должны использовать
вместо простого
mv "$filename"
или, что еще хуже, без кавычек имя файла.источник
mkdir ./-p
Имейте в виду, что большинство других программ должны будут использовать тот же «трюк».
источник