Что означает «-» в терминальных командах?


23

Я видел много уроков, которые используют --команды после. Что-то вроде этого:

command -- 

Что это --значит?


Какие видео уроки?
Странник


На самом деле, я удивлен, что этот вопрос уже не был дураком на АС. Не относятся ли идентичные вопросы к другим сообществам StackExchange как к обманщикам (а именно по ссылке, указанной @edwinksl)? Что вы думаете об этом? Может быть, я должен спросить это на META ....
Cbhihe

@Cbhihe Мне не известен механизм, который позволяет нам указывать на дубликаты целей других сайтов SE. Во всяком случае, это случается не слишком часто, поэтому, вероятно, в этом нет необходимости.
Edwinksl

3
@ anonymous2 с какой стати мы это делаем? Вопрос по теме здесь, так что он может остаться. Его перемещение удаляло бы информацию из AU и не добавляло бы ничего нового в U & L, поэтому я не понимаю, почему это было бы хорошо.
Тердон

Ответы:


46

--Используется , чтобы указать конец параметров командной строки. Это позволяет вам использовать аргументы, начинающиеся с --. Например, если вы создаете файл с именем --foo:

$ > '--foo'
$ ls
--foo

А затем попытайтесь удалить его, rmподумайте, что вы даете этому аргумент:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

Одним из способов обойти это является использование --:

$ rm -- --foo

Это обычная практика, рекомендуемая POSIX , поэтому она поддерживается многими программами.


13
Это не реализовано Bash вообще. Это является особенностью rmпрограммы и многих POSIX-совместимых утилит. См. Положение 10 . Чтобы на самом деле убедиться, что это не Bash, выполняющий работу (и это не имеет смысла), просто создайте небольшой скрипт с помощью just printf '> %s <\n' "$@"и запустите его с помощью --.
gniourf_gniourf

3
@gniourf_gniourf d'oh! Я проверил это, написав небольшой Perl-скрипт, который печатает его параметры, и он не видит ни одного, если вы передадите его a --, но, конечно, это просто потому, что соответствующий модуль Perl ( getopts) также поддерживает его. Вы совершенно правы, я просто быстро искал man bash, видел раздел, который я процитировал, но не заметил, что он находится в разделе «параметры командной строки». Спасибо за исправление, ответ отредактирован.
тердон

1

Большинство команд будут использовать -, чтобы сообщить команде, что другие параметры должны обрабатываться по-разному. Одним из примеров является rm - --filename, указанное выше. Другой пример, такой скрипт, как 'startx', будет интерпретировать сам все до - и передавать все после него на X-сервер.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.