首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有更优雅的方式来编写带有重叠(嵌套)选择的语句?

有没有更优雅的方式来编写带有重叠(嵌套)选择的语句?
EN

Stack Overflow用户
提问于 2019-09-18 06:32:50
回答 2查看 59关注 0票数 1

我想写一个有重叠选项的case语句。

互联网上的快速搜索给了我一些例子,其中有一些独特且不重叠的备选方案,比如:

代码语言:javascript
运行
复制
case $var in
    a) <code> ;;
    b) <code> ;;
    *) <code> ;;
esac

但我需要一个备选方案包含几个备选方案和额外的工作。我是这样想的:

代码语言:javascript
运行
复制
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语句似乎太多了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-18 06:43:04

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

代码语言:javascript
运行
复制
#! /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

这给了我们

代码语言:javascript
运行
复制
▏~ $ 1.sh 1
0..7
0..4
▏~ $ 1.sh 6
0..7
5..7
票数 4
EN

Stack Overflow用户

发布于 2019-09-18 07:04:35

代码语言:javascript
运行
复制
commonFunc() {
    <common_code>
}

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

或者:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57982823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档