与えられた番号がどの範囲(バケット)に属するかを確認する

与えられた番号がどの範囲(バケット)に属するかを確認する

ゼロから始まり、同じサイズ(たとえば32)の一連の範囲(たとえば、バケットまたは鳩穴)があります。

[0… 31]、[32… 63]、[64… 95]、…

負でない整数が与えられたら、それが属するバケットを(bashまたは他のシェルスクリプトで)どのように決定しますか?たとえば、

  1. 与えられた数字が15の場合、応答は[0… 31](すなわち、最小= 0および最大= 31)
  2. 与えられた数字が35の場合、応答は[32… 63](例:32&&63)

答え1

これはどうですか?

range() {
  # increment
  incr=$1
  # input
  input=$2

  # mathematically, min = floor( input/incr )*incr
  # then max = min+incr-1
  # but `floor' isn't necessary in bash because it uses integer division

  min=$(( input/incr*incr ))
  max=$(( min+incr-1 ))

  echo $min $max
}

それから:

$ range 32 15
0 31
$ range 32 35
32 63

関連情報