bash – getopts – 如果标志为空,则getopts使用下一个标志
发布时间:2020-12-16 01:49:14 所属栏目:安全 来源:网络整理
导读:我正在尝试将getopts用于bash脚本.此脚本可以有标志,所有这些标志都是必需的,需要包含一个值.当其中一个应该包含值的强制标志为空时,getopts使用next-in-line标志作为其内容.我该如何防止这种情况? 这是我的例子: #!/bin/bashwhile getopts "A:B:" OPTIONd
我正在尝试将getopts用于bash脚本.此脚本可以有标志,所有这些标志都是必需的,需要包含一个值.当其中一个应该包含值的强制标志为空时,getopts使用next-in-line标志作为其内容.我该如何防止这种情况?
这是我的例子: #!/bin/bash while getopts "A:B:" OPTION do case $OPTION in A) GILIA="$GILIA $OPTARG" echo GILIA $GILIA ;; B) GILIB="$GILIB $OPTARG" echo GILIB $GILIB ;; esac done 使用带有值的两个标志时: ./test_opt2 -A aaa -B bbb GILIA aaa GILIB bbb 使用“-A”标志为空时: ./test_opt2 -A -B bbb GILIA -B 我知道这是getopts的正常/典型行为,我确信有办法解决这个问题…… 有任何想法吗? 解决方法
你可以做的是检查$OPTARG的值.如果以 – 开头,则减小索引$OPTIND的值,以便 – 下一次循环时选择 – 参数作为OPTION.
在第二个示例中,处理空-A参数时,$OPTIND将设置为3.我的代码将值设置回2,以便接下来处理-B. case $OPTION in A) arg=${OPTARG#-} if [ $arg == $OPTARG ] then GILIA="$GILIA $OPTARG" echo GILIA $GILIA else echo "-A needs argument" OPTIND=$OPTIND-1 fi ;; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |