代码之家  ›  专栏  ›  技术社区  ›  Lenik

如何在bash中同时支持短和长选项?[副本]

  •  29
  • Lenik  · 技术社区  · 14 年前

    我想支持短期和长期的选择 bash 脚本,因此可以:

    $ foo -ax --long-key val -b -y SOME FILE NAMES
    

    有可能吗?

    1 回复  |  直到 14 年前
        1
  •  38
  •   strager    6 年前

    getopt 支持长选项。

    http://man7.org/linux/man-pages/man1/getopt.1.html

    下面是一个使用参数的示例:

    #!/bin/bash
    
    OPTS=`getopt -o axby -l long-key: -- "$@"`
    if [ $? != 0 ]
    then
        exit 1
    fi
    
    eval set -- "$OPTS"
    
    while true ; do
        case "$1" in
            -a) echo "Got a"; shift;;
            -b) echo "Got b"; shift;;
            -x) echo "Got x"; shift;;
            -y) echo "Got y"; shift;;
            --long-key) echo "Got long-key, arg: $2"; shift 2;;
            --) shift; break;;
        esac
    done
    echo "Args:"
    for arg
    do
        echo $arg
    done
    

    输出 $ foo -ax --long-key val -b -y SOME FILE NAMES :

    Got a
    Got x
    Got long-key, arg: val
    Got b
    Got y
    Args:
    SOME
    FILE
    NAMES