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