V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
qingfeng
V2EX  ›  Linux

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

  •  
  •   qingfeng · 2013-10-16 15:29:36 +08:00 · 3190 次点击
    这是一个创建于 4052 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如何判断shell的函数参数是带0个1个或两个'-'符号,比如:

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

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

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

    个人觉得用得最爽的还是Python加命令行处理库argparse或者别的啥。
    lululau
        2
    lululau  
       2013-10-16 17:05:31 +08:00
    getopts 功能太简单,不支持长选项, getopt 命令可移植性又不好,所以我觉得像包含了长选项等等比较复杂的命令行选项处理的话,直接交给 ruby/python 等脚本语言来处理吧,别用 shell 写了
    hitsmaxft
        3
    hitsmaxft  
       2013-10-16 20:48:54 +08:00
    ARG_NUM="${#@[@]}"
    hitsmaxft
        4
    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
        5
    yboren  
       2013-10-16 22:22:01 +08:00
    getopt或者getopt_long
    vicence
        6
    vicence  
       2013-10-16 23:46:44 +08:00
    @hitsmaxft 在学shell脚本,你写的我看晕了
    yegle
        7
    yegle  
       2013-10-17 04:51:33 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4852 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:50 · PVG 17:50 · LAX 01:50 · JFK 04:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.