有人可以告诉我如何使用getopt解析以下命令行选项吗?
myCmd [[-f <file> | -k | -v] -e <env> -h help]
其中
f
,k
和v
是互斥的。 f
和e
都需要参数,但k
和v
不需要参数。
所以命令可以是:
我尝试了以下内容:
while getopts "f:kve:" o
do
case "$o" in
f | k | v) process_file ;;
k) process_key ;;
v) process_var ;;
e) process_env ;;
*) print_help ;;
esac
done;
这似乎不起作用。任何帮助表示赞赏。
答案 0 :(得分:1)
您需要自己添加该逻辑。这是未经测试的:
file=""
has_k=false
has_v=false
env=""
while getopts "f:kve:" opt; do
case "$opt" in
f) file="$OPTARG" ;;
k) has_k=true ;;
v) has_v=true ;;
e) env="$OPTARG" ;;
*) print_help; exit 1 ;;
esac
done
shift $((OPTIND - 1))
if ( [[ -n $file ]] && $has_k ) ||
( [[ -n $file ]] && $has_v ) ||
( $has_k && $has_v )
then
echo "May only specify one of -f,-k,-v"
print_help
exit 1
fi