Что означает «-» и «-» на любой Unix оболочке? - PullRequest
0 голосов
/ 26 марта 2020

может кто-нибудь сказать мне, в чем разница между - и --. Например, в этой команде:

 docker run --name some-name -e MYSQL_ROOT_PASSWORD=some_password mysql

Я понимаю, что я запускаю контейнер docker с mysql в качестве изображения с именем some-name и паролем some_password. Чего я не понимаю, так это того, почему я использую -- для параметра имени и - для параметра пароля.

Ответы [ 3 ]

1 голос
/ 26 марта 2020

По стандарту POSIX , опции - это буквы, перед которыми стоит один символ * sh. Они могут быть объединены; например, ls -l -a эквивалентно ls -la.

По соглашению GNU длинным опциям предшествует две черты. Очевидно, что вы не можете комбинировать их как обычные параметры, но они более читабельны.

Большинство параметров имеют обе формы; например, большинство программ распознают -h и --help как эквиваленты.

1 голос
/ 26 марта 2020

Что означают «-» и «-» на любой Unix оболочке?

-- и - не имеют значения в оболочке.

Это просто параметры для команды docker.

Если вы хотите узнать, какое значение они имеют для команды docker, вам придется искать их в man docker.

Нет абсолютно никакой разницы между --name, -e, foo или --!--!--!--. Все они являются просто именами параметров, - - это такая же часть имени, как n или e.

--name - это имя параметра, -e - это имя параметра, run - это имя параметра.

Что я не получаю, так это то, почему я использую -- для параметра имени и - для параметра пароля.

Краткий ответ: потому что именно это автор команды docker выбрал для вызова этих параметров.

Немного более длинный ответ заключается в том, что существуют некоторые соглашения, согласно которым некоторые команды следовать в некоторой степени. В частности, docker, кажется, следует этим трем очень распространенным соглашениям:

  • " подкоманда ": это соглашение, которое было популяризировано такими инструментами, как iproute2 и git, которые имеют одну команду «master», первым параметром которой является имя «подкоманды» (которая может иметь еще больше подкоманд), например: ip route, ip addr add, git commit, git status, docker run.
  • " короткие опции ": это соглашение столь же старо, как Unix, может быть, даже старше. Опцией должен быть один буквенный символ c, которому предшествует -. Несколько последовательных вариантов могут быть объединены. Примеры: mkdir -p, ls -la.
  • " long options ": это соглашение взято из системы GNU. Опции - это целые описательные слова, которым предшествует --. Пример: ls --color

Но я хотел бы повторить, потому что очень важно понять: это не имеет ничего общего с оболочкой. Эти опции обрабатываются только docker и docker. Параметры были бы точно такими же, если бы вы вызывали docker из командной строки Windows или из Python: нигде не было видно Unix оболочки.

1 голос
/ 26 марта 2020

Это произвольное соглашение, и не все программы следуют ему, но обычно - предшествуют однобуквенному аргументу и - предшествуют аргументу с полным или несколькими словами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...