使用 getopts 解析带有冒号的强制性参数

问题描述

是否有可能在 bash 中使用 getopt 解析包含冒号的强制性参数?

假设我已经准备了如下代码

    while getopts "qt:i:" arg; do
        case "$arg" in
             :)
                HOST=$(printf "%s\n" "$1"| cut -d : -f 1)
                PORT=$(printf "%s\n" "$1"| cut -d : -f 2)
                shift 1
                ;;
            -q)
                QUIET=1
                shift 1
                ;;
            -t)
                TIMEOUT="$2"
                if [ "$TIMEOUT" = "" ]; then break; fi
                shift 2
                ;;
            -i)
                INTERVAL="$2"
                if [ "$INTERVAL" = "" ]; then break; fi
                shift 2
                ;;
            -h)
                usage 0
                ;;
            *)
                echoerr "UnkNown argument: $1"
                usage 1
                ;;
        esac
    done

完整代码可以在这里找到:https://pastebin.com/1eFsG8Qn

我如何调用脚本:

wait-for database:3306 -t 60 -i 10

问题是这个逻辑不能解析HOST_URL:PORT。 任何提示如何解析它?

解决方法

是否有可能在 bash 中使用 getopt 解析包含冒号的强制性参数?

当然 - 他们必须追求选项。

wait-for -t 60 -i 10 database:3306

然后:

while getopts .... ;do
    case ...
    blabla) .... ;;
    esac
done
shift "$(($OPTIND-1))"
printf "Connect to %s\n" "$1"      # here

参数中的冒号无论如何都不相关。

有什么解析它的技巧吗?

使用 getopt - 它重新排列参数。