【问题标题】:What does "--" and "-" mean on any Unix Shell?在任何 Unix Shell 上,“--”和“-”是什么意思?
【发布时间】:2020-07-06 22:45:05
【问题描述】:
谁能告诉我- 和-- 之间的区别。例如,在这个命令中:
docker run --name some-name -e MYSQL_ROOT_PASSWORD=some_password mysql
我知道我正在运行一个以 mysql 作为映像的 docker 容器,名称为 some-name,密码为 some_password。我不明白为什么我使用-- 作为名称参数和- 作为密码参数。
【问题讨论】:
标签:
linux
shell
unix
terminal
parameters
【解决方案1】:
POSIX standard 提供的选项是前面有一个短划线的字母。它们可以组合;例如ls -l -a 等价于ls -la。
GNU convention 的长选项前面有两个破折号。显然,您不能像普通选项那样组合它们,但它们更具可读性。
大多数选项都有这两种形式;例如,大多数程序将 -h 和 --help 识别为等效项。
【解决方案2】:
这是一个任意的约定,并非所有程序都遵循它,但通常 - 在单字母参数之前和 - 在全字或多字参数之前。
【解决方案3】:
“--”和“-”在任何 Unix Shell 上是什么意思?
-- 和 - 在 shell 中没有意义。
这些只是docker 命令的参数。
如果您想知道它们对docker 命令的含义,您必须在man docker 中查找它们。
--name、-e、foo 或 --!--!--!-- 之间绝对没有区别。它们都是简单的参数名称,- 与 n 或 e 一样多是名称的一部分。
--name是参数名,-e是参数名,run是参数名。
我不明白为什么我使用-- 作为名称参数,使用- 作为密码参数。
简短的回答是:因为docker 命令的作者选择调用这些参数。
略长一点的答案是某些命令在某种程度上遵循一些约定。特别是,docker 似乎遵循以下三个非常常见的约定:
- "subcommand":这是一种被
iproute2 和git 等工具推广的约定,它们有一个“主”命令,其第一个参数是“子命令”的名称"(然后可以有更多的子命令),例如:ip route、ip addr add、git commit、git status、docker run。
- “短选项”:这个约定与 Unix 一样古老,甚至可能更早。选项应该是单个字母数字字符,前面带有
-。可以组合多个连续选项。示例:mkdir -p、ls -la。
- “长选项”:此约定来自 GNU 系统。选项是前面带有
-- 的完整描述性词。示例:ls --color
但我想重复一遍,因为理解这一点非常重要:这与 shell 无关。这些选项由docker 和docker 单独处理。如果您从 Windows 命令行或 Python 调用 docker,选项将完全相同:在任何地方都看不到 Unix shell。