如何检查变量是否在 [AZ] 中?
我想实现这样的目标:
read var
while [ $var in [A-Z] ]
do
#code here
done
我该如何实现这一目标?
答案1
==
在 bash 中,您可以在 a的右侧使用模式[[ ... ]]
:
read var
LC_ALL=C # Turn off locale.
if [[ $var == [A-Z] ]] ; then
echo yes
fi
如果您不想y
进入,则可能需要关闭区域设置A-Z
。
答案2
简单的一个衬里是:
re='[a-zA-Z]'; if [[ Z =~ $re ]]; then echo "Match"; else echo "No match"; fi
完整的脚本是:
#!/bin/bash
re='[a-zA-Z]'
read -p "Enter a char or string > " var
if [[ "$var" =~ $re ]]; then
echo "Entered string matches."
else
echo "Entered string does not match";
fi
答案3
假设$var
是单个字符:
如果您使用过,case
那么它将可以移植到任何sh
shell:
case "$var" in [A-Z]) thing_to_do_here ;; esac
甚至
case "$var" in [[:upper:]]) thing_to_do_here ;; esac
对于那些不喜欢不平衡括号的人:可以这样写
case "$var" in ([[:upper:]]) thing_to_do_here ;; esac
答案4
如果您不想依赖 Bash 的正则表达式:
remainder=$(tr -d A-Z <<<$var)
while [ ! -z $remainder ];do
read -p "Invalid value entered. Please try again." var
remainder=$(tr -d A-Z <<<$var)
done
我猜你想用它来进行输入验证。