2

是否可以执行以下操作(以及如何执行?)(,为什么不呢?):

MATCH="--opt1 | --opt2"
while true ; do
    case $1 in
        $MATCH)
             echo "option $2" found;
             shift 2;;
        *)
             unknown option; exit 1;
    esac
done

由于我不明白这不起作用的原因。但是,只有一个像 MATCH="--opt1" 这样的选择就可以了。

编辑1:可能的解决方案

可以简单地检查给定选项是否出现在多个允许选项的字符串中,而不是使用 case 语句,例如使用 grep 和 if。要完全动态地完成它,可以考虑以下解决方案,它也可能与 case 语句结合或嵌入到 case 语句中:

while true ; do
if [ -n "$(echo $MATCHES|grep -- $1)" ]; then
    echo "found option $1 with value $2"
    shift 2
fi
done
4

1 回答 1

10

管道字符嵌入参数值时,按字面意思处理,而不是按语法处理。您必须使用多个字符串:

while true; do
    case $1 in
       $MATCH1 | $MATCH2 )
       # etc
于 2013-10-07T12:31:28.270 回答