Версия теста [[
поддерживает регулярные выражения начиная с Bash 3.0.
[[ 3 =~ ^[2-5]$ ]]; echo $? # 0
Операторы сравнения чисел в тесте иногда возвращают ошибку, если ввод не числовой:
[[ 1a -ge 1 ]]; echo $? # value too great for base (error token is "1a")
[[ '$0' -le 24 ]] # syntax error: operand expected (error token is "$o")
Вы можете проверить, является ли ввод целым числом с помощью =~
:
x=a23; [[ "$x" =~ ^[0-9]+$ && "$x" -ge 1 && "$x" -le 24 ]]; echo $? # 1
x=-23; [[ "$x" =~ ^-?[0-9]+$ && "$x" -ge -100 && "$x" -le -20 ]]; echo $? # 0