使用--getopts拾取整个单词标记

kid*_*d_x 4 unix bash getopts

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

如下所示:

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

试图拿起那些双破折号。

小智 10

基本上是 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
Run Code Online (Sandbox Code Playgroud)

$#表示参数的数量,-gt“大于”,$1在本例中是标志,并且$2是标志的值。

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

IAM Yeezy, Do it
Run Code Online (Sandbox Code Playgroud)


kid*_*d_x 3

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

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

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