在bash脚本中,我可以使用&&将两个命令行参数组合在一起吗

问题描述

|| 这是一个片段: 对于\“ $ @ \”中的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
则不行),否则您的代码会变得异常复杂,因为它试图根据各种可能性检查每个参数。