问题描述
是否有可能在 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
- 它重新排列参数。