在Case语句中使用带有多个选项的变量

时间:2013-10-07 12:27:12

标签: bash variables switch-statement

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

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语句结合或嵌入:

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

1 个答案:

答案 0 :(得分:9)

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

while true; do
    case $1 in
       $MATCH1 | $MATCH2 )
       # etc