可以在一个 case 语句中匹配多个条件吗?

Mou*_*inX 28 bash shell-script case

我想做这样的事情,在星期五,输出适用于两个匹配的条件:

#!/bin/bash

#!/bin/bash
NOW=$(date +"%a")
case $NOW in
    Mon)
        echo "Mon";;
    Tue|Wed|Thu|Fri)
        echo "Tue|Wed|Thu|Fri";;
    Fri|Sat|Sun)
        echo "Fri|Sat|Sun";;
    *) ;;
esac
Run Code Online (Sandbox Code Playgroud)

正如上面的代码所写,周五唯一的输出是:

周二|周三|周四|周五

周五的预期产量:

周二|周三|周四|周五
周五|周六|周日

我的理解是,通常执行与表达式匹配的第一个模式对应的命令

有没有办法为其他匹配的模式执行命令?

编辑:我不是在寻找失败行为,但这也是一件值得了解的好事。谢谢钢刀。

ste*_*ver 52

你可以使用;;&连词。来自man bash

               Using ;;& in place of ;; causes the shell to test
the next pattern list in the statement, if any, and execute  any
associated  list on a successful match.
Run Code Online (Sandbox Code Playgroud)

前任。给予

$ cat myscript 
#!/bin/bash
NOW=$(date -d "$1" +"%a")
case $NOW in
    Mon)
        echo "Mon";;
    Tue|Wed|Thu|Fri)
        echo "Tue|Wed|Thu|Fri";;&
    Fri|Sat|Sun)
        echo "Fri|Sat|Sun";;
    *) ;;
esac
Run Code Online (Sandbox Code Playgroud)

然后

$ ./myscript thursday
Tue|Wed|Thu|Fri

$ ./myscript friday
Tue|Wed|Thu|Fri
Fri|Sat|Sun

$ ./myscript saturday
Fri|Sat|Sun
Run Code Online (Sandbox Code Playgroud)

有关更多信息(包括其他 shell 中的等效项),请参阅

  • 今天我学会了! (8认同)