Зачем использовать superflous dash (-) для передачи флажков опций в tar?

Чтобы создать файл tar для каталога, команда tar с помощью compress, verbose и file могут быть напечатаны таким образом:

$ tar -cvf my.tar my_directory/

Но он также работает, чтобы сделать это следующим образом:

 $ tar cvf my.tar my_directory/

То есть без дефиса (-), предшествующего параметрам. Зачем вам когда-либо передавать тире (-) в список опций?

27 голосов | спросил Milktrader 22 Mayam11 2011, 03:26:54

4 ответа


37

Существует несколько разных шаблонов для опций, которые исторически использовались в приложениях UNIX. Несколько старых, например tar , используйте схему позиционирования:

  

аргументы параметров команды

, как, например, tar использует

  

tar * something * f "файл работает на" * "путях файлов для управления * *

В первой попытке избежать путаницы, tar и несколько других программ со старым стилем flags-arguments позволили разграничить флаги с тире, но большинство из нас, старых парней, просто проигнорировали это.

Некоторые другие команды имеют более сложный синтаксис командной строки, например dd (1) , который использует флаги, равные знаки, имена путей, аргументы и партридж в грушевом дереве, все с диким отказом.

В BSD и более поздних версиях unix это более или менее сходилось к односимвольным флагам, помеченным знаком «-», но это начало представлять пару проблем:

  • флагов может быть трудно запомнить
  • иногда вы действительно хотели использовать имя с '-'
  • и особенно с инструментами GNU, стали появляться ограничения, налагаемые количеством возможных флагов. Поэтому GNU-инструменты добавили дополнительные опции GNU, такие как --output.

Затем Sun решила, что дополнительный '-' был лишним и начал использовать флаги с длинным стилем с одиночными '-'s.

И вот как это теперь стало беспорядок.

ответил Charlie Martin 22 Mayam11 2011, 03:40:39
9

Вы можете указать параметры tar в стандартном стиле unix tar -c -f foo -v -B file1 file2 file3, где вам нужна тире, чтобы различать параметры и параметры или имена файлов в конце командной строки. Или вы можете поместить все параметры вместе в первый аргумент, и в этом случае тире необязательно.

Тогда есть ps, где вы используете тире, если вы используете параметры SysV-ish, и оставьте их, если вы используете опции BSD-ish, просто чтобы сделать вещи более запутанными.

И пусть даже не говорит о find.

ответил Paul Tomblin 22 Mayam11 2011, 03:36:42
2

Тире используется для устранения неоднозначности между именами параметров и значениями параметров. Я предполагаю, что это скорее стандартное соглашение.

ответил 22 Mayam11 2011, 03:29:09
0

Существует четыре соглашения для использования параметров командной строки unix:

  1. -o -p -t (тире перед каждой опцией)
  2. -opt (тире перед набором параметров)
  3. opt (без тире перед набором опций)
  4. - long-option (двойная тире перед именем опции)

Например:

$ tar -x -v -z -f package.tar.gz
$ tar -xvzf package.tar.gz
$ tar xvzf package.tar.gz
$ tar --extract -verbose -gzip -file package.tar.gz
ответил jonasjacek 14 WedEurope/Moscow2016-12-14T11:11:17+03:00Europe/Moscow12bEurope/MoscowWed, 14 Dec 2016 11:11:17 +0300 2016, 11:11:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132