前言

linux shell命令通常可以通过-h或--help来打印帮助说明,或者通过man命令来查看帮助,有时候我们也会给自己的程序写简单的帮助说明,其实帮助说明格式是有规律可循的

帮助示例

下面是git reset命令的帮助说明,通过man git-reset可以查看

git reset [-q] [] [--] ...

git reset (--patch | -p) [] [--] [...]

git reset [--soft | --mixed | --hard | --merge | --keep] [-q] []

对于命令和参数大致有如下几种类型

没有任何修饰符参数 : 原生参数
<> : 占位参数
[] : 可选组合
() : 必选组合
| : 互斥参数
... : 可重复指定前一个参数
-- : 标记后续参数类型

下面来一一介绍

参数类型解读

原生参数

说明文档里的字符即为命令需要使用的字符,比如以上命令的

git reset

这种参数在使用时必需指定,且和说明文档里的一致

占位参数

表示方式: <>

和原生参数类似,都是必需指定的,只不过占位参数的实际字符是在使用时指定的,同时为了方便阅读会用一个描述词汇来表示,并以<>包围,比如

表示路径,使用时可以指定为具体的路径,而paths只是起一个说明作用,有些帮助说明里也会用大写来表示占位参数,比如将以上参数说明写成PATHS

可选组合

表示方式: []

括号里的参数为可选参数,比如usage第二个里面的[-q] ,则-q为可选参数

可选项和占位参数也可以同时使用,如

[]

表示该参数可以指定某次提交,也可以不指定

必选组合

表示方式: ()

括号里的参数必需指定,通常里面会是一些互斥参数,比如

(--patch | -p)

表示--patch和-p这两个参数必需指定一个

互斥参数

表示方式: |

互斥参数一般都在()和[]里,表示该参数只能指定其中一个,比如

[--mixed | --soft | --hard | --merge | --keep]

重复参数

表示方式: ...

表示前一个参数可以被指定多个,比如

...

是一个占位参数,使用时必需指定为路径,...并表示可以指定多个路径。重复参数的一个典型使用场景就是移动文件,将多个文件移动到一个目录下,比如如下命令

git mv [] ...

我们可以这样使用

git mv -f a.cpp b.py dir

此时options对应为-f参数,source对应为a.cpp b.py,destination对应为dir

标记后续参数类型

表示方式: --

表示后续参数的某种类型,比如这里如果使用如下命令

git reset -p -- xx

对比第一个命令,这里的xx对应的应该是参数,当我们指定--之后,则git会认为xx就是一个路径,那怕它是特殊符号或者路径并不存在。这是shell命令的一个通用方式,比如我们有一个文件名为-h,如果想删除这个文件,执行

rm -h

肯定是无法删除的,因为这时-h会被认为是rm的一个参数选项,应该使用

rm -- -h

这时shell会将-h解释为一个文件名传递给rm命令

解读实战

最后来解释一个比较复杂的帮助说明

git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p||--textconv)

该命令参数由四个部分,其中git和cat-file为原生参数,()里的为可选组合, 为占位参数

组合又由6部分组成,为互斥关系

-t [--allow-unknown-type]

-s [--allow-unknown-type]

-e

-p



--textconv

因此该命令的帮助说明可以拆分如下

git cat-file -t

git cat-file -t --allow-unknown-type

git cat-file -s

git cat-file -s --allow-unknown-type

git cat-file -e

git cat-file -p

git cat-file

git cat-file --textconv

Shell-help格式详解的更多相关文章

  1. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  2. java分享第十五天(log4j 格式详解)

    log4j 格式详解  log4j.rootLogger=日志级别,appender1, appender2, -. 日志级别:ALL<DEBUG<INFO<WARN<ERRO ...

  3. shell字符串操作详解

    shell字符串操作详解的相关资料. 1.shell变量声明的判断  表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...

  4. php 序列化(serialize)格式详解

    1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手册中对这两个函数的说明仅限于如何使用,而对序列 ...

  5. Java字节码(.class文件)格式详解(一)

    原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...

  6. [Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等

    本課主題 通过 Spark-shell 窥探程序运行时的状况 TaskScheduler 与 SchedulerBackend 之间的关系 FIFO 与 FAIR 两种调度模式彻底解密 Task 数据 ...

  7. PNG,JPEG,BMP,JIF图片格式详解及其对比

    原文地址:http://blog.csdn.net/u012611878/article/details/52215985 图片格式详解 不知道大家有没有注意过网页里,手机里,平板里的图片,事实上,图 ...

  8. binlog之四:mysql中binlog_format模式与配置详解,binlog的日志格式详解

    mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...

  9. 以太网帧格式、IP数据报格式、TCP段格式+UDP段格式 详解

    转载:http://www.cnblogs.com/lifan3a/articles/6649970.html 以太网帧格式.IP数据报格式.TCP段格式+UDP段格式 详解   1.ISO开放系统有 ...

  10. FLV视频封装格式详解

    FLV视频封装格式详解 分类: FFMpeg编解码 2012-04-04 21:13 1378人阅读 评论(2) 收藏 举报 flvheaderaudiovideocodecfile 目录(?)[-] ...

随机推荐

  1. Window系统 安装TFLearn

    1. 确保成功安装了tensorflow 2. 查看当前tensorflow下的库文件,判断是否已经安装了h5py,scipy:conda list 3. 若没有安装,安装h5py,scipy.我的电 ...

  2. 【转载】JSP 获取真实IP地址的代码

    JSP 获取真实IP地址的代码 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.   但是在通过了 Apache,Squid ...

  3. 一些$LCT$的瓜皮题目

    一些瓜皮 放几个比较优(she)秀(pi)的\(LCT\)题. 老惯例,每一题代码因为一些未知原因消失了(如果要的话私我好了,虽然会咕咕咕). 嘴巴\(AC\)真香! [SP16580] QTREE7 ...

  4. BZOJ3829 [Poi2014]FarmCraft 【树形dp】

    题目链接 BZOJ3829 题解 设\(f[i]\)为从\(i\)父亲进入\(i\)之前开始计时,\(i\)的子树中最晚装好的时间 同时记\(siz[i]\)为节点\(i\)子树大小的两倍,即为从父亲 ...

  5. 【bzoj3751】 Hnoi2014—画框

    http://www.lydsy.com/JudgeOnline/problem.php?id=3571 (题目链接) 题意 给出一个$2*N$个点的二分图,$N*N$条边,连接$i$和$j$的边有两 ...

  6. Effective C++ 条款08:别让异常逃离析构函数

    1.别让异常逃离析构函数的原因 <Effective C++>第三版中条款08建议不要在析构函数中抛出异常,原因是C++异常机制不能同时处理两个或两个以上的异常.多个异常同时存在的情况下, ...

  7. 解题:ZJOI 2013 K大数查询

    题面 树套树,权值线段树套序列线段树,每次在在权值线段树上的每棵子树上做区间加,查询的时候左右子树二分 本来想两个都动态开点的,这样能体现树套树在线的优越性.但是常数太大惹,所以外层直接固定建树了QA ...

  8. 统计学习方法:CART算法

    作者:桂. 时间:2017-05-13  14:19:14 链接:http://www.cnblogs.com/xingshansi/p/6847334.html . 前言 内容主要是CART算法的学 ...

  9. Linux服务器修改文件句柄数和用户最大进程数限制

    1.临时修改的方法:ulimit -HSn 102400此方法当前会话有效 2.永久修改方法(修改单个进程打开的最大句柄数)修改vi /etc/security/limits.conf,在后面添加一下 ...

  10. Hystrix的回退和zuul的回退总结

    1.Hystrix的回退: Ribbon: Feign: zuul的回退: