是否可以执行以下操作(以及如何操作?)(,或者为什么不呢?):
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
答案 0 :(得分:9)
当嵌入参数值时,管道字符按字面处理,而不是语法。您必须使用多个字符串:
while true; do
case $1 in
$MATCH1 | $MATCH2 )
# etc