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