如何判断shell的函数参数是带0个1个或两个'-'符号

2013-10-16 15:29:36 +08:00
 qingfeng
如何判断shell的函数参数是带0个1个或两个'-'符号,比如:

function test() {
if [ $1 == "" ]; then
do something;
fi
}

如果要让函数接受 x -x --x 这三种形式都可以工作,这个参数判断应该怎么写啊?求指教
3186 次点击
所在节点    Linux
7 条回复
gastlygem
2013-10-16 16:53:56 +08:00
如果需求很简单的话用这个应该就行:
if [ $1 == "x" ] || [ $1 == "-x" ] || [ $1 == "--x" ]

正经的复杂参数处理应该使用getopts,详细用法需要查查文档。

个人觉得用得最爽的还是Python加命令行处理库argparse或者别的啥。
lululau
2013-10-16 17:05:31 +08:00
getopts 功能太简单,不支持长选项, getopt 命令可移植性又不好,所以我觉得像包含了长选项等等比较复杂的命令行选项处理的话,直接交给 ruby/python 等脚本语言来处理吧,别用 shell 写了
hitsmaxft
2013-10-16 20:48:54 +08:00
ARG_NUM="${#@[@]}"
hitsmaxft
2013-10-16 21:03:33 +08:00
如果是要涉及到统计 -xx 的个数,顺手写了个工具函数

function test () {
count=0 ;
for arg in "${@[@]}" ; do
[[ "$arg" != "${arg#-}" ]] && count=$(( $count +1))
done
echo $count
}
yboren
2013-10-16 22:22:01 +08:00
getopt或者getopt_long
vicence
2013-10-16 23:46:44 +08:00
@hitsmaxft 在学shell脚本,你写的我看晕了
yegle
2013-10-17 04:51:33 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/85771

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX