bash + 정규 표현식을 사용한 while 루프

bash + 정규 표현식을 사용한 while 루프

다음 루프는 숫자가 1보다 작거나 45보다 클 때 반복되지만, 대답에 [ % & * # ] 등과 같은 특수 문자가 포함되어 있으면 실패합니다.

이 문제를 지원하기 위해 코드에서 무엇을 변경할 수 있습니까?

a=1
b=45


while [[ $answer -lt $a ]] || [[ $answer -gt $b ]]
do

echo -n "please answer"
read answer
done

답변1

전체 개념을 다시 생각해 볼 수도 있습니다. 계속 진행하는 데 도움이 되는 간단한 스니펫은 다음과 같습니다.

#!/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

답변2

이 시도:

#!/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')줄은 답변에서 모든 특수 문자를 제거하고 변수를 새 값으로 재설정합니다.

관련 정보