Linux BASH:x27-';和'--';选择权

Linux BASH:x27-';和'--';选择权,linux,bash,shell,sh,ls,Linux,Bash,Shell,Sh,Ls,我当时正在研究一本关于Shell(Bash)脚本编写的入门读物,并产生了以下疑问: 我遇到了ls命令 man页面的ls列出了一些用例,如下所示: ls-a ls——块大小='M' 我的问题: -和-有什么区别 为什么使用两个术语 背后的动机是什么 长格式(--foo)选项是一个GNU扩展,它存在于GNUls中,但在UNIX工具的POSIX标准设置要求中根本不存在,因此其他版本的ls没有义务支持这些选项。在这种情况下,整个单词(foo)是有意义的。这种命名法是最近才添加的,比缩写形式更

我当时正在研究一本关于Shell(Bash)脚本编写的入门读物,并产生了以下疑问:

  • 我遇到了ls命令

  • man
    页面的
    ls
    列出了一些用例,如下所示:

    ls-a

    ls——块大小='M'

我的问题:

  • -
    -
    有什么区别
  • 为什么使用两个术语
  • 背后的动机是什么
长格式(
--foo
)选项是一个GNU扩展,它存在于GNU
ls
中,但在UNIX工具的POSIX标准设置要求中根本不存在,因此其他版本的
ls
没有义务支持这些选项。在这种情况下,整个单词(
foo
)是有意义的。这种命名法是最近才添加的,比缩写形式更具表现力(并且没有名称空间限制)


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

它们都实现了相同的任务:将参数传递给被调用的程序。实现这一点的方法不多,也没有标准的方法:这是两种主要的方法,即短期权和长期权(GNU风格)。

一个程序不需要同时实现它们,尽管它通常的实现方式让它们成为唯一的处理方式。

不完全相关,但很接近,根本不是bash问题--
ls
是一个外部命令;无论什么程序调用它,无论该程序是否为shell,它的行为都完全相同。很抱歉@CharlesDuffy,我不知道ls是一个外部命令-我是一个新手:)请您稍微详细解释一下-我无法真正理解您的意思;)@普拉纳夫,你能更具体地说清楚什么吗?这是我所说的“一个字符接一个字符”,还是我所说的“GNU扩展”,或者其他什么?嗨,@CharlesDuffy,我无法理解:GNU扩展,“一个字符接一个字符”,长格式vs短格式,“至少在形式上”。很抱歉,如果我是一个后遗症患者:)(以及同一维基上的其他内容——陷阱页面和常见问题解答特别有用)是一个很好的起点。@Manningham,
find
实际上符合POSIX语法指南,因为在POSIX标准版本的
find
中,至少有一个目录名是必需的--您必须使用
find-iname
,不仅是
find-iname
——而且根据POSIX实用程序语法指南(但与GNU更宽松的实现不同),超过第一个参数的所有内容也是位置参数,而不是选项。因此,所有的
find
操作和过滤器--
-iname
-print
等--都被指定为位置参数,而不是选项(这是有意义的,因为它们是顺序敏感的)。从形式上讲,有一种标准方式(在“已批准并发布的标准机构”中),尽管它只绑定到符合POSIX的实用程序(包括
ls
)上。