问题描述
||
这是一个片段:
对于\“ $ @ \”中的arg;做
如果[$ arg == \“-coverage \”];然后
ENABLE_COVERAGE = 1
转移
elif [$ arg == \“-MysqL \”];然后
MysqL_ONLY = 1
转移
elif [$ arg == \“-psql \”];然后
Psql_ONLY = 1
转移
elif [$ arg == \“-h \”] || [$ arg == \“-help \”];然后
用法
转移
elif [$ arg == \“-qa \”];然后
QA_ONLY = 1
Psql_ONLY = 1
MysqL_ONLY = 1
转移
elif [$ arg == \“-qa \”] && [$ arg == \“-MysqL \”];然后
QA_ONLY = 1
MysqL_ONLY = 1
转移
elif [$ arg == \“-qa \”] && [$ arg == \“-psql \”];然后
QA_ONLY = 1
Psql_ONLY = 1
转移
elif [$ arg == \“-\”];然后
转移
打破
科幻
做完了
解决方法
如果可以在bash中调用getopt,则不能调用getopt,它不应使用长选项名。使用getopts代替getopt。(下面是一个示例)
#!/bin/bash
while getopts qm OPT
do
case $OPT in
q) opt_qa=1;;
m) opt_mysql=1;;
esac
done
if [ $opt_qa = 1 ]; then
# do as qa
fi
if [ $opt_mysql = 1 ]; then
# do as mysql
fi
, $arg
永远不能等于to2ѭ和--mysql
。
如果您正在谈论不同的论点,那么可以,您可以执行以下操作:
if [[ $arg1 == \"--qa\" && $arg2 == \"--mysql\" ]] ; then
QA_ONLY=1
MYSQL_ONLY=1
fi
但是我经常发现,最好先扫描依次为每个参数设置一个标志的参数,然后使用这些标志确定行为,这是一个更好的主意。否则,您要么将命令行参数限制为特定顺序(xyz --qa --mysql
可以工作,xyz --mysql -- qa
则不行),否则您的代码会变得异常复杂,因为它试图根据各种可能性检查每个参数。