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')行は、回答からすべての特殊文字を削除し、変数を新しい値にリセットします。

関連情報