我想写一个有重叠选项的case语句。
互联网上的快速搜索给了我一些例子,其中有一些独特且不重叠的备选方案,比如:
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
我猜有没有更优雅或更理性的方式来做到这一点。对我来说,这种简单场景的嵌套case语句似乎太多了。
发布于 2019-09-18 06:43:04
如果您的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
发布于 2019-09-18 07:04:35
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
https://stackoverflow.com/questions/57982823
复制相似问题