Мне было интересно, как сделать файл с именем флага, например, если бы я хотел сделать папку с именем -a
, какие команды добились бы цели?
Я пытался mkdir '-a'
, mkdir \-a
и ни один не работал. Я на Ubuntu.
Мне было интересно, как сделать файл с именем флага, например, если бы я хотел сделать папку с именем -a
, какие команды добились бы цели?
Я пытался mkdir '-a'
, mkdir \-a
и ни один не работал. Я на Ubuntu.
Ответы:
Вызовите команду так:
Это
--
означает, что после этого опции заканчиваются, поэтому-a
интерпретация интерпретируется буквально, а не как опцияmkdir
. Этот синтаксис вы найдете не только вmkdir
любой POSIX-совместимой утилите, ноecho
и вtest
. Из спецификации :Использование
--
в качестве меры безопасности рекомендуется практически для любого действия, когда вы имеете дело с именами файлов и хотите убедиться, что они не нарушают команду, например, при перемещении файлов в цикле вы можете вызвать следующее, чтобы файл с именем-i
isn ' t (in?) правильно анализируется как опция:источник
cc -o -myfile -Wall -myfile.c
бы немного надуманный пример. Любой полезный редактор должен иметь возможность сохранить файл с именем,-myfile.c
если вы его об этом попросите, но компилятор C, вероятно, не будет делать то, что вы хотите, если ему будет предоставлен такой список опций.cc
команда, приведенная выше Майклом, в которой есть-o
возможность указать выходной файл.for f in ./*; do...
а неfor f in *; do...
Самый простой способ работы с любой приемлемой программой - использовать относительный путь перед именем
-
, напримерmkdir ./-a
, создаст каталог с именем-a
в текущем рабочем каталоге.Наиболее распространенный пример использования этого «трюка» - это когда вы хотите удалить файл, который начинается с тире, так что вы можете это сделать
rm ./-a
.источник
./
всегда хорошая идея - представьте, что вы создали файл с именем,-rf
а затем вы вызвалиrm *
.--
не понятен каждой команде, только немногие)--
это вещь bash, так что она должна работать для всех программ?Причина, почему
mkdir '-a'
илиmkdir \-a
не работает, заключается в том, что оба эти метода (с использованием кавычек или обратной косой черты) используются для предотвращения придания вашей оболочке (вероятноbash
) какого-либо особого значения. Так-a
как в любом случае для оболочки ничего особенного не значит, это никак не влияет на то, как она передаетсяmkdir
.Что
mkdir
касается этого, он получает список аргументов от оболочки и не может сказать, помещены ли они в кавычки или нет, или был ли обратный слеш. Просто видит один аргумент-a
. Вот почему вам нужно--
как описано в других ответах.источник
В дополнение к ответу от «slhck» есть еще одна хитрость, которая иногда работает:
Поместите имя файла в 2 набора (разных) qoutes, как
"'-a'"
или'"-a"'
.Работает это или нет, зависит от программы, но это последнее средство, если программа не поддерживает
--
функцию POSIX .Метод POSIX всегда предпочтителен, поскольку он надежен на 100%.
источник
--
для прекращения обработки опций также предполагает, что вам не нужны никакие опции для следования имени файла, что не всегда так.'-a'
or"-a"
, по крайней мере, в системах типа BSD