Bash
可以在一個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
正如上面的程式碼所寫,星期五的唯一輸出是:
週二|週三|週四|週五
週五的期望輸出:
週二|週三|週四|週五
週五|週六|週日
我了解通常情況下,只會執行與匹配表達式的第一個模式相對應的命令。
有沒有辦法為其他匹配模式執行命令?
編輯:我不是在尋找失敗的行為,但這也是一件好事。謝謝鋼鐵司機。
你可以使用
;;&
連詞。來自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 中的等價物),請參閱