【问题标题】: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。我不明白为什么我使用-- 作为名称参数和- 作为密码参数。

【问题讨论】:

  • getopt。不过,并非所有程序都对长选项使用双破折号,例如,ffmpeg 的所有选项都以单破折号开头。

标签: 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-efoo--!--!--!-- 之间绝对没有区别。它们都是简单的参数名称,-ne 一样多是名称的一部分。

    --name是参数名,-e是参数名,run是参数名。

    我不明白为什么我使用-- 作为名称参数,使用- 作为密码参数。

    简短的回答是:因为docker 命令的作者选择调用这些参数。

    略长一点的答案是某些命令在某种程度上遵循一些约定。特别是,docker 似乎遵循以下三个非常常见的约定:

    • "subcommand":这是一种被iproute2git 等工具推广的约定,它们有一个“主”命令,其第一个参数是“子命令”的名称"(然后可以有更多的子命令),例如:ip routeip addr addgit commitgit statusdocker run
    • 短选项”:这个约定与 Unix 一样古老,甚至可能更早。选项应该是单个字母数字字符,前面带有-。可以组合多个连续选项。示例:mkdir -pls -la
    • 长选项”:此约定来自 GNU 系统。选项是前面带有-- 的完整描述性词。示例:ls --color

    但我想重复一遍,因为理解这一点非常重要:这与 shell 无关。这些选项由dockerdocker 单独处理。如果您从 Windows 命令行或 Python 调用 docker,选项将完全相同:在任何地方都看不到 Unix shell。

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 1970-01-01
      • 2010-09-09
      • 2012-10-14
      • 2011-11-14
      • 2010-10-23
      • 2012-04-17
      相关资源
      最近更新 更多