BASH : '-' 和 '--' 选项之间的区别

BASH : Difference between '-' and '--' options

我正在学习 Shell (Bash) 脚本 的入门读物,并且有以下疑问:

  • I came across the ls command

  • The man page of ls lists a few use cases as :

    ls -a
    ls --block-size='M'

我的问题:

  • What is the difference in - and -- ?
  • Why are there 2 nomenclatures used ?
  • What is the motivation behind it ?

长格式 (--foo) 选项是 GNU 扩展 -- GNU ls 中存在的东西,但根本不存在于 UNIX 工具的 POSIX 标准设置要求中, 所以其他版本的 ls 没有义务支持这些选项。在这种情况下,整个单词 (foo) 是有意义的。这个命名法是最近添加的,比缩写形式更具表现力(并且没有名称空间限制)。

短格式选项 (-al) 至少在形式上是标准化的(尽管扩展名可以添加新的)。它们是逐个字符处理的,一次一个字母——所以 -al 表示 -a(显示隐藏文件)和 -l(长输出),而不是 -al 在这种情况下有其自身的含义。这是 UNIX 命令行选项的原始语法,因此不仅为了简洁而且为了向后兼容而受到支持。

它们都实现了相同的任务:将参数传递给被调用的程序。没有太多方法可以做到这一点,也没有标准方法:这是两个主要的方法,称为短选项和长选项(GNU 风格)。
一个程序不需要同时实现它们,尽管它通常的实现方式允许将它们作为唯一的来处理。