为什么有命令行选项的短选项和长选项?

ygo*_*goe 28 linux unix command-line-arguments

大多数 unixoid 命令都具有命令行选项的短选项和长选项,例如ls -aand ls --all、 orls -Als --almost-all。为什么会有这两种方式?一个打字更短,另一个更容易阅读和理解。但是每次我写一个shell脚本时,我都需要决定我要使用哪个。知道为什么存在这两种选择吗?哪个是第一个,为什么要介绍另一个。例如在 DOS/Windows 上,几乎只有不区分大小写的单字母选项。

Gil*_*il' 28

最初只有单字符选项。一些程序采用多字符选项,但仍然只有一个破折号。AFAIK 双破折号多字符选项来自GNU;引入它们是因为它们更具可读性并且通常更容易记住(并且您可以拥有超过 52 个)。许多程序现在都有:当您在命令行上键入并记住字符时的短选项,脚本或命令行上的长选项(如果您只记住较长的选项名称)。

  • +1 提到长选项更适合脚本,因为它们有助于记录事物 (17认同)
  • 至于“只有 52 个”:试试 `ls -BartSimpsonIsJustCool`(或者如果你在 Solaris 上使用 `Great`。 (6认同)
  • @ user712092 不,这是一个技巧。在 Linux 下,`I` 之后的所有内容都是 `-I` 选项的参数,因此只有在当前目录中有一个名为 `sJustCool` 的文件时才会有所不同。`-BartSimpson` 部分可以重新排序,除了 `S`(按大小排序)必须保留在 `t`(按日期排序)之后。当存在 `n` 或 `o` 时,`m` 也无效。所以这个命令相当于`ls -BSainopsr`,如果我没有遗漏任何东西,你不能删除另一个字母来实现相同的输出,你可以自由地重新排列这些字母。 (6认同)
  • @AaronDigulla 这是复活节彩蛋吗? (2认同)
  • @Gilles:顺便说一句,为了尽可能准确,可能有 62 个不同的短选项(包括数字),而不是 52 个。例如,考虑“gzip -9 文件名”。 (2认同)