Unix shell 命令的一般语法是什么?

2024-03-07

特别是,为什么有时某些命令的选项前面有一个+标志,有时由- sign?

例如:

sort -f
sort -nr
sort +4n
sort +3nr

如今,POSIX 标准使用getopt() http://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html (aka getopt(3) http://linux.die.net/man/3/getopt) 被广泛用作标准符号,但在早期,人们一直在进行试验。在某些机器上,sort命令不再支持+符号。然而,各种命令(特别是ar and tar) 接受不带任何前缀字符的控件 - 并且dd(Alok 在评论中提到)完全使用另一种约定。

GNU 约定使用 '--' 对于长选项(由getopt_long(3) http://linux.die.net/man/3/getopt_long) 已从使用 ' 更改为+'。当然,X11 软件在多字符选项之前使用单破折号。因此,整个事情就是历史文物的集合,人们正在尝试如何最好地处理它。

POSIX 文档实用约定 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html除非历史先例更为有力,否则它确实有效。


有哪些类型的期权处理方式?

[有一次,SO 367309 https://stackoverflow.com/questions/367309包含以下材料作为我的答案。最初由 2008-12-15 02:02 提出FerranB https://stackoverflow.com/users/40441/ferranb,但随后被关闭并删除。]

您认识多少种不同类型的选项?我能想到 许多,包括:

  • 单字母选项前面有单破折号,有时可分组 没有参数,参数可以附加到选项字母或下一个 参数(很多很多 Unix 命令;大多数 POSIX 命令)。
  • 单字母选项前面有单破折号,不允许分组, 必须附加参数(RCS)。
  • 单字母选项前面有单破折号,不允许分组, 参数必须是单独的(POSIX SCCS、IIRC 之前的版本)。
  • 多字母选项前面有单破折号,参数可以是 附加或在下一个参数中(X11 程序;还有 Java 和 Mac OS X 上具有 NeXTSTEP 遗产的许多程序)。
  • 多字母选项前面有单破折号,可以缩写 (Atria Clearcase)。
  • 多字母选项前面有一个加号(已过时)。
  • 多字母选项前面有双破折号;参数可以跟在“=”之后 或者是独立的(GNU 实用程序)。
  • 没有前缀/后缀的选项,某些名称有缩写或 暗示,参数必须是分开的。 (Amiga操作系统 壳 http://www.amigahistory.co.uk/command.html)

对于采用可选参数的选项,有时必须附加该参数 (co -p1.3 rcsfile.c), 有时它必须跟在“=”符号之后。 POSIX 不支持可选 参数有意义(POSIX getopt() 只允许最后一个参数使用它们) 命令行上的选项)。

所有明智的选项系统都使用由双破折号组成的选项 ('--') 单独表示“选项结束”——以下参数是 “非选项参数”(通常是文件名;POSIX 称它们为“操作数”) 即使他们从 短跑。 (我认为支持这种表示法是必要的。请注意,如果--前面是一个需要参数的选项,--将被视为选项的参数,而不是“选项结束”标记。)

许多但并非所有程序都接受单破折号作为文件名来表示 标准输入(通常)或标准输出(偶尔)。有时, 与 GNU 一样tar',两者都可以在单个命令行中使用:

... | tar -cf - -F - | ...

第一个单独的破折号意味着“写入标准输出”;第二个意思是“读取文件” 来自 stdin' 的名称。

有些程序使用其他约定 - 即选项前面没有 短跑。其中许多都来自 Unix 最古老的时代。例如, 'tar' 和 'ar' 都接受不带破折号的选项,因此:

tar cvzf /tmp/somefile.tgz some/directory

The dd命令用途opt=value只:

dd if=/some/file of=/another/file bs=16k count=200

有些程序允许您交错选项和其他参数 完全地; C 编译器、make 和 GNU 实用程序无需运行 环境中的 POSIXLY_CORRECT 就是示例。许多节目都期望 其他参数之前的选项。

注意git和其他 VCS 命令经常使用混合系统:

git commit -m 'This is why it was committed'

有一个子命令作为参数之一。通常,可以在命令和子命令之间指定可选的“全局”选项。 POSIX 中有这样的例子;这sccs http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sccs.html命令属于此类;您可以争辩说,运行其他命令的一些其他命令也属于此类别:nice and xargs我首先想到的是 POSIX;sudo是一个非 POSIX 示例,如下所示svn and cvs.


我对不同的系统没有强烈的偏好。什么时候 选项足够少,然后是具有助记值的单个字母 很方便。 GNU 支持这一点,但建议使用 多字母选项前面有双破折号。

有些事情我确实反对。最糟糕的之一也是一样 选项字母根据其他内容具有不同的含义 选项字母位于其前面。在我的书中,这是禁忌,但我知道 完成该操作的软件的名称。

另一个令人反感的行为是处理方式不一致 参数(特别是对于单个程序,但也在一组内) 程式)。要么需要附加参数,要么需要分离 参数(或允许其中之一),但没有一些选项需要 附加参数和其他需要独立参数的参数。并 关于是否 ' 一致=' 可用于分隔选项和 的论点。

与很多很多(与软件相关的)事物一样——一致性更重要 比个人的决定更重要。使用自动化工具 标准化论证处理有助于保持一致性。


无论你做什么,请阅读TAOUP 的命令行选项 http://catb.org/~esr/writings/taoup/html/ch10s05.html和 考虑命令行接口标准 http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html. (添加者:JF 塞巴斯蒂安——谢谢;我同意。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unix shell 命令的一般语法是什么? 的相关文章

  • 如何在不使用 LINQ 的情况下按降序对 FileInfo 对象数组进行排序

    我必须降级我的代码才能在 NET 2 0 上工作 因为它不支持 LINQ 目前 该代码对数组进行排序FileInfo对象由他们FullName属性 使用 LINQ 如下所示 Dim files As FileInfo files files
  • 怎样才能使 Windows 成为一个开箱即用的 POSIX 兼容操作系统?

    这个问题的动机是我的一个牵强的梦想 即 nix 平台上可用的许多优秀软件可以轻松移植到 Windows 微软最近对开源和开放性采取了不同的方法 所以我真的很想知道如果微软有这样的倾向 这样的事情会有多可行 我很好奇的一些更具体的事情是 是否
  • 如何将命令作为参数传递给 ssh [重复]

    这个问题在这里已经有答案了 我的需要是让这个命令起作用 sshpass p XXXX ssh oStrictHostKeyChecking no email protected cdn cgi l email protection sudo
  • 设置 Pyenv 的路径

    我正在尝试在我的服务器中设置 Pyenv 的加载路径 bashrc file 我正在关注这个tutorial https realpython com intro to pyenv 它要求我们在哪里设置pyenv到加载路径 然而 在我的 b
  • 在以下程序中将产生多少个进程

    int main fork fork fork fork fork printf forked n return 0 当我们调用 fork 函数时 父进程会得到一个非零 pid而孩子得0分作为回报 基于这个逻辑 在第二个陈述中 我们必须应用
  • 如何通过 shell 脚本确定网页是否存在?

    我正在尝试制作一个程序 可以将一系列漫画扫描转换为一个 pdf 文件 并且我不想尝试下载图片来确定我是否有正确的网址 是否有一个 shell 脚本命令可以用来检查网页是否存在 在 NIX 下 您可以使用curl发出一个简单的HEAD要求 H
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • 在 Unix 中添加用户和组

    有谁知道在unix中添加用户和组以及删除它们的api吗 我想以编程方式执行此操作 谢谢 坦率 我开始查看一些系统调用并发现以下内容 请注意 它们具有不同的标准 因此并非所有标准都可以在您的 Unix 版本上运行 getpwent setpw
  • sleep 0 有特殊含义吗?

    我看到很多用法sleep 0在我的一个客户项目中 代码看起来像这样 while true sleep 0 end 阅读一些像这样的答案this https stackoverflow com questions 3727420 signif
  • 如何在lua中获取shell脚本的返回码?

    我正在lua中执行一个脚本 os execute sh manager scripts update system sh f 我想获得脚本的输出 如果退出状态为 7 则返回 7 I tried local output os execute
  • 如何将设备屏幕位置转换为发送事件位置?

    我知道关于input tap x yshell 命令 但是 我想了解如何 使用执行单击sendevent命令 我能够通过以下命令实现它 sendevent dev input event5 3 53 X sendevent dev inpu
  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • VBScript:从 Scripting.Dictionary 中对项目进行排序

    我有下面的代码 它获取这样的数据 姓名 1 姓名 4 姓名 2 姓名 3 并像这样列出 是一个复选框 姓名 1 姓名 4 姓名 2 姓名 3
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • Mongodb shell mongo:通常只允许每个套接字地址(协议/网络地址/端口)使用一次。对于套接字:0.0.0.0:27017

    前两天还好好的 现在mongod不起作用 甚至echo ps A grep mongo没有打印任何内容 但它警告错误 每个套接字地址只有一种用途 怎么杀掉它 我也尝试过不同的随机端口 他们怎么可能也失败呢 D mongodb win32 x
  • 负整数的基数排序

    我正在尝试对整数 包括负整数 实现基数排序 对于非负整数 我计划为数字0 9创建一个10个队列的队列 并实现LSD算法 但我对负整数有点困惑 我现在的想法是继续为它们创建另一个包含 10 个队列的队列 并分别对它们进行排序 然后在最后 我将
  • 如何在Python中按AaB而不是ABa顺序对字符串进行排序

    我正在尝试对字符串进行排序 为 punnetsquare 制作基因型 我目前的实现是 unsorted genotype ABaB sorted genotype sorted list unsorted genotype sorted s
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while

随机推荐

  • 如何用OPENCV得到最小外接圆?

    我在用着cv minEnclosingCircle 为了得到精确地演变我的轮廓的最小圆 但我得到了一个更大的圆 换句话说 我正在尝试得到这样的东西 https upload wikimedia org wikipedia commons t
  • ClassLoader getResourceAsStream 返回 null

    我的项目目录结构 在Eclipse中 MyProject src gt source directory on Eclipse s classpath buildpath com me myapp Driver myconfig txt I
  • Django - 将参数传递给内联表单集

    我在用inlineformset factory使用中介考勤模型为客户端和会话之间的多对多关系创建字段 我的视图文件中有以下内容 AttendanceFormset inlineformset factory Session Attenda
  • Canvas.drawText() 不会在 Android 上呈现大表情符号

    Canvas drawText 不渲染表情符号在 Android 上超过一定的字体大小 Correct render at somewhere below 256 px Incorrect render at above 256 px 有一
  • 如何从 MVC/Razor 页面将参数传递到顶级服务器端 blazor 组件?

    将 Blazor 组件添加到现有 MVC 或 Razor 页面时 能够将参数传递到 Blazor 组件中非常有用 例如将 MVC 页面的 URL 中的参数 例如 ID 传递到组件上 直到 Core 3 Preview 9 服务器渲染组件才可
  • 快速添加按钮到SCNNode

    我正在研究 ARKit 和图像检测 现在我有一个应用程序可以检测图像并将平面放置在屏幕上检测到的对象所在的位置 如何添加可点击的元素 例如飞机上的按钮 我想在每个检测到的对象上都有一个单击事件 这就是我的渲染器函数的样子 func rend
  • ASP.NET MVC 2:查看子文件夹?

    在我看来 当我使用视图和控制器时 控制器仅处理各自文件夹的第一级 Controllers MembersController Views Members 控制器应该如何处理子文件夹 Views Members Business 控制器isn
  • Mono 中的 P/Invoke

    什么是当前状态 of Mono http www mono project com 的平台调用实现Linux and on Solaris 工作 可用且稳定 它经过了充分的测试 因为相当多的 mono 自己的低级功能必须通过它编组到底层操作
  • 为什么日期之间的减法会返回 Rational 类型?

    我正在尝试对日期执行减法运算 date sent Date parse 2013 01 01 gt Tue 01 Jan 2013 date now Date today gt Wed 04 Sep 2013 days date now d
  • PHP 中的 undefined 相当于什么?

    我的假设随后是基于假设的问题 JavaScript 有null and undefined 您可以将变量设置为null 表示它没有值 或者您可以将其设置为undefined 这意味着不知道它是否有值 它只是根本没有设置 PHP has nu
  • akka-http 具有多种路由配置

    快速背景 我正在通过一些示例学习 Akka HTTP 堆栈来创建新的 REST 项目 完全非 UI 我一直在使用和增强Akka HTTP 微服务示例 http www typesafe com activator template akka
  • Java / 重构 switch case

    我正在尝试重构下一个案例 class Gen public void startClick A a B b List
  • Ubuntu 上的 Giza++ 有正确的安装指南吗?

    我看到适用于 Giza 的正确安装指南 但不适用于 Giza 安装前者的说明 可在此处找到 http giza sourceforge net documentation installation html http giza source
  • 接口和抽象类中的 Xml 属性

    今天发现了一件让我很困惑的事情 1 如果我有这个 public interface INamed XmlAttribute string Name get set public class Named INamed public strin
  • 人名中允许使用哪些字符? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Git / 分离 HEAD,恢复工作吗?

    我对我认为是我的分支进行了数十次提交 然后检查了另一个分支 愿意回到我最初的分支 我没有找到我更新的代码 在控制台中查看我的历史记录后 我了解到我在一个独立的分支工作 是否有可能获得我在独立分支上完成的工作 是的 您可以使用重新记录 尝试g
  • date() 方法,“遇到格式不正确的数值”不希望格式化 $_POST 中传递的日期

    不幸的是我不能使用DateTime 因为该项目所在的服务器正在运行 PHP v 5 2 有问题的行 aptnDate2 date Y m d POST nextAppointmentDate 抛出以下错误 Notice A non well
  • 如何同步线上线下数据库

    我有一个Web应用程序为我的客户提供一些信息 我有另一个版本 windows that exactly work same as web application 这是因为 Web 连接可能会丢失几个小时 而此时用户将使用该应用程序 我想知道
  • Jenkins:在升级构建中使用存档的工件

    我已经将一个工件归档为构建的最后一步 它可以如下所示使用 https xxx ci cloudbees com job xxx 52 artifact target xxx 1 2 1 SNAPSHOT r8304 20130807 150
  • Unix shell 命令的一般语法是什么?

    特别是 为什么有时某些命令的选项前面有一个 标志 有时由 sign 例如 sort f sort nr sort 4n sort 3nr 如今 POSIX 标准使用getopt http pubs opengroup org onlinep