6

可以使用 getopts 来获取全字标志吗?

如下所示:

while getopts ":abc --word" opt; do
    case ${opt} in
        a) SOMETHING
            ;;
        ...
        --word) echo "Do something else."
            ;;
    esac
done

试图拿起那些双划线标志。

4

3 回答 3

6

http://mywiki.wooledge.org/BashFAQ/035 来源:如何使用内置 Bash getopts 的长选项?.

于 2014-02-25T20:56:07.883 回答
5

基本上是 Ark 的答案,但比 mywiki 页面更容易和更快地阅读:

#!/bin/bash
# example_args.sh

while [ $# -gt 0 ] ; do
  case $1 in
    -s | --state) S="$2" ;;
    -u | --user) U="$2" ;;
    -a | --aarg) A="$2" ;;
    -b | --barg) B="$2" ;;

  esac
  shift
done

echo $S $U, $A $B

#$是参数的数量,-gt是“大于”,$1在这种情况下是标志,$2是标志的值。

./example_args.sh --state IAM --user Yeezy -a Do --barg it 结果是:

IAM Yeezy, Do it
于 2019-09-05T00:01:27.213 回答
2

找到了一种方法来做到这一点:

while getopts ":abc-:" opt; do
    case ${opt} in
        a) echo "Do something"
            ;;
        ...
        -)
            case ${OPTARG} in
                "word"*) echo "This works"
                    ;;
            esac
    esac
done

通过将 -: 添加到操作字符串并使用 $OPTARG 添加子案例,您可以选择所需的长选项。如果要包含该选项的参数,可以将 * 或 =* 添加到案例并选择参数。

于 2014-02-25T20:57:10.707 回答