はじめに
シェルスクリプトのCase文で数値の範囲指定が使えないか検索してみたら,Zshの拡張正規表現ではそれが可能ということがわかったので,いろいろ試してみた.
環境
Zsh 5.6.2
使い方
文法
<x-y>
これでx以上y以下の数値を指定できる.Zshのマニュアルによれば,xとyはそれぞれ省略可能,故に<->
はあらゆる数にマッチする.
使用例
# !/bin/zsh
foo=5
case "$foo" in
<0-10> ) echo "aaa" ;;
<11-20> ) echo "bbb" ;;
<-> ) echo "ccc" ;;
esac
# =>aaa
temperature=40
case "$temperature" in
<38-> ) echo "flu" ;; # 38以上
<-> ) echo "normal" ;;
esac
# =>flu
age=18
case "$age" in
<-18> ) echo "child" ;; #18以下
<-> ) echo "adult" ;;
esac
# =>child
ちなみに負の数には対応していない模様.
# !/bin/zsh
water_temp=-30
case "$water_temp" in
<-0> ) echo "solid" ;;
<1-99> ) echo "liquid" ;;
<100-> ) echo "gas" ;;
esac
# =>(何も表示されない)
負の数を判別したいなら,次の方法で行うという手がある.
# !/bin/zsh
negative_number=-30
case "$negative_number" in
-<1-> ) echo "negative." ;;
0 ) echo "zero." ;;
<1-> ) echo "positive." ;;
esac
# =>negative.
また,正規表現であるゆえ,使用場面はCase文に限らない([1]).
参考元
[1]zsh で「<>」を使って数値による範囲指定を行う - ablog
https://yohei-a.hatenablog.jp/entry/20090824/1251099682
[2]shell - case + how to implement equal or less or greater in case syntax - Unix & Linux Stack Exchange
https://unix.stackexchange.com/questions/65310/case-how-to-implement-equal-or-less-or-greater-in-case-syntax