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

おすすめ記事