有没有更优雅的方式来编写具有重叠(嵌套)替代方案的语句?



我想写一个带有重叠替代方案的案例陈述。

在互联网上快速搜索为我提供了独特且不重叠的替代方案示例,例如:

case $var in
a) <code> ;;
b) <code> ;;
*) <code> ;;
esac

但是我需要一种替代方案包含多个替代方案和额外工作的场景。我是这样想的:

case $loglevel in
[0-7]) <code>
case $loglevel in
[0-3] <redirect to /dev/console> 
;;
[4-7] <redirect to /dev/null> 
;;
esac
;;
*) <code> ;;
esac

我想有没有更优雅或更合理的方法来做到这一点。在我看来,对于如此简单的场景,嵌套案例语句太多了。

如果您的 shell 足够现代,您可以使用;;&而不是;;来尝试以下条件,即使当前条件成功:

#! /bin/bash
loglevel=$1
case $loglevel in
([0-7]) echo 0..7
;;&
([0-4]) echo 0..4
;;
([5-7]) echo 5..7
;;
(*) echo Ohter
esac

这给了

▏~ $ 1.sh 1
0..7
0..4
▏~ $ 1.sh 6
0..7
5..7
commonFunc() {
<common_code>
}
case $loglevel in
[0-3] commonFunc
<redirect to /dev/console> 
;;
[4-7] commonFunc
<redirect to /dev/null> 
;;
*) <other_code> ;;
esac

或:

case $loglevel in
[0-3] needX=1; needY=1 ;;
[4-7] needX=1; needZ=1 ;;
*) <other_code> ;;
esac
if [ "$needX" = 1 ]; then
<common_code> 
fi
if [ "$needY" = 1 ]; then
<redirect to /dev/console> 
fi
if [ "$needZ" = 1 ]; then
<redirect to /dev/null>
fi

最新更新