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')行将从答案中去除所有特殊字符并将变量重置为新值。

相关内容