Shell拾遗
Howard Yin 2019-12-03 16:04:03 Shell实操编程语言
# getopts和getopt
这两个都是用来解析脚本运行时的命令行参数的。
# getopts
只能处理短选项,无法处理长选项,暂不介绍
# getopt
可以同时处理短选项和长选项。
getopt命令不是一个标准的unix命令,但它在大多数Linux的发行版中都自带了有,如果没有,也可以从getopt官网上下载安装。
用法👇
<存储解析结果的变量>=`getopt [--options <短命令解析设置>] [--long <长命令解析设置>] [-n <解析错误时提示的脚本名>] <要解析的变量>`
1
下面这个示例
ARGS=`getopt -o :ab:c:: --long along,blong:,clong:: -n 'example.sh' -- "$@"`
1
-o
或--options
选项后面接可接受的短选项,如ab:c::
,表示可接受的短选项为-a -b -c
,其中-a
选项不接参数,-b
选项后必须接参数,-c
选项的参数为可选的:ab:c::
开头的:
表示不打印错误信息-l
或--long
选项后面接可接受的长选项,用逗号分开,冒号的意义同短选项。-n
选项后接选项解析错误时提示的脚本名字
# --的用法
*nix 中,ls 命令是用来列出当前目录下的文件和子目录的。它可以接受一些选项(如 -lrt)。现在的问题是,如果有一个文件,它的名字叫做 -foobar,要怎样才能列出它的相关信息呢?
实际上 ls 内部使用了 getopts 解析参数。于是我们可以这样👇
ls -lrt -- -foobar
1
利用两个连续的连字符 --,显式地告诉 getopts:到这为止!然后,ls 会读入 -foobar 作为文件名,显示它的相关信息。