Вы можете переосмыслить всю концепцию. Это простой фрагмент, который поможет вам двигаться вперед.
#!/usr/bin/env bash
a=1
b=45
while read -p 'Please answer: ' answer
do
re=$(printf '%s\n' "$answer" | tr -dc '[[:digit:]]')
if ((re < a || re > b)); then
read -p 'Please answer: ' $re
else
echo "Loop ended"
exit
fi
done
попробуй это:
#!/bin/bash
#
a=1
b=45
#
while [[ $answer -lt $a || $answer -gt $b ]]; do
read -p "please answer: " answer
answer=$(echo "$answer" | tr -dc '[:alnum:]\n\r')
done
Строка answer=$(echo "$answer" | tr -dc '[:alnum:]\n\r')
удалит все специальные символы из ответа и установит новое значение переменной.