Bash

可以在一個case語句中匹配多個條件嗎?

  • April 15, 2020

我想做這樣的事情,在星期五,輸出適用於兩個匹配的條件:

#!/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

正如上面的程式碼所寫,星期五的唯一輸出是:

週二|週三|週四|週五

週五的期望輸出:

週二|週三|週四|週五

週五|週六|週日

我了解通常情況下,只會執行與匹配表達式的第一個模式相對應的命令。

有沒有辦法為其他匹配模式執行命令?

編輯:我不是在尋找失敗的行為,但這也是一件好事。謝謝鋼鐵司機。

你可以使用;;&連詞。來自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.

前任。給定

$ 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

然後

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

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

$ ./myscript saturday
Fri|Sat|Sun

有關更多資訊(包括其他 shell 中的等價物),請參閱

引用自:https://unix.stackexchange.com/questions/577603