Что означает «-» в качестве аргумента команды?

9

Я нашел эту ссылку о том, как открыть tgz за один шаг .

gzip -dc target.tar.gz | tar xf -

Что означает «-»?

ripper234
источник
1
Кроме того, большинство версий tar теперь поддерживают gzip и bzip. Для gzip-ed tar-файла tar xfz target.tar.gzи для bziptar xfj target.tar.bz2
удаленная учетная запись

Ответы:

18

Это общепринятое соглашение, используемое -в аргументе имени файла для обозначения stdinили stdout; tarследует тому же соглашению. Со страницы руководства:

   -f, --file [HOSTNAME:]F
          use archive file or device F (default "-", meaning stdin/stdout)
Михаил Мрозек
источник
1
Это всего лишь соглашение; вам нужно прочитать man-страницу для конкретной команды, чтобы увидеть, что -для нее значит. Stdin / stdout является наиболее распространенным значением, но есть и другие. Например, для некоторых версий envэто означает «начать с пустой среды».
CJM
0

Другое соглашение заключается в использовании «-» для указания конца флагов и начала имен файлов. Такое поведение встроено в getopt (3) в RedHat 4, по крайней мере. Я не могу найти справочную страницу Red Hat, которая использует «-» для обозначения конца аргументов, кажется, что все они используют «-» для этого. В этом контексте man-страница awk имеет знак «-», поэтому, возможно, только старые команды Unix или Solaris «семейной реликвии» используют «-» в качестве разделителя аргументов - имен файлов.

Брюс Эдигер
источник
3
--сигнализирует об окончании опций, поэтому все, что приходит после, является операндом. -это не вариант, поэтому он и все, что приходит потом, является операндом. Это стандартное поведение . Для многих команд, таких как tar, операнд -означает стандартный ввод или вывод . На многих оболочках set - -aэквивалентно set -- -a, а на некоторых старых оболочках Борна set - -aбыла единственная принятая форма, но это исключение со setвстроенной.
Жиль "ТАК - перестань быть злым"
Программы Solaris в основном следуют стандартному соглашению POSIX, --чтобы отделить параметры от аргументов.
Алан