Я новичок в работе с оболочкой, и использование этих команд кажется произвольным. Есть ли причина, по которой один флаг имеет одну черту, а другой может иметь двойную черту?
Я новичок в работе с оболочкой, и использование этих команд кажется произвольным. Есть ли причина, по которой один флаг имеет одну черту, а другой может иметь двойную черту?
Ответы:
За одним дефисом могут следовать несколько односимвольных флагов. Двойной дефис префикс одного и того же символа с несколькими символами.
Рассмотрим этот пример:
tar -czf
В этом примере, -czf
определяют три односимвольных флаги: c
, z
и f
.
Теперь рассмотрим другой пример:
tar --exclude
В этом случае --exclude
указывается одна опция, состоящая из нескольких символов exclude
. Двойной дефис устраняет неоднозначность аргумента командной строки, гарантируя , что tar
интерпретирует это как , exclude
а не сочетание e
, x
, c
, l
, u
, d
, и e
.
cdrecord
упомянуто много лет назад в комментариях выше.
Все зависит от программы. Обычно «-» используется для «коротких» параметров (одна буква, -h), а «-» используется для «длинных» (er) параметров (--help).
Короткие параметры обычно можно комбинировать (поэтому "-h -a" совпадает с "-ha")
В Unix-подобных системах ASCII-дефис-минус обычно используется для указания опций. За символом обычно следуют одна или несколько букв. Аргумент, который представляет собой один дефис-минус сам по себе без букв, обычно указывает, что программа должна обрабатывать данные, поступающие со стандартного ввода, или отправлять данные на стандартный вывод. Два дефиса-минус (()) используются в некоторых программах для указания «длинных опций», где используются более описательные имена опций. Это общая черта программного обеспечения GNU.
Это действительно соглашение. Тем не менее, это может помочь парсерам более эффективно узнавать о параметрах, передаваемых программе. Кроме того, существуют полезные утилиты, которые могут помочь при разборе этих команд, например getopt(3)
или нестандартные, getopt_long(3)
чтобы помочь разобрать аргументы программы.
Это хорошо, потому что мы можем объединить несколько коротких опций, как говорят другие ответы tar -xzf myfile.tar.gz
.
Если бы был аргумент "lisa" для ls
, вероятно, было бы иметь другое значение для типа, ls -lisa
чем ls --lisa
. Первые являются l
, i
, s
и a
параметры, а не слово.
На самом деле, вы можете написать ls -l -i -s -a
, то есть точно так же, как ls -lisa
, но это будет зависеть от программы.
Есть также программы, которые не подчиняются этому соглашению. Особенно на мой взгляд, dd
и gcc
.
короткие варианты с одним тире против длинных вариантов с двойным тире
короткие варианты могут быть объединены в один аргумент;
for example: ls -lrt #instead of ls -l -r -t
Если мы разрешаем длинные варианты с одной чертой, это вызывает неоднозначность. Чтобы решить эту проблему, мы используем двойную черту для длинных опций.