bash脚本:检查变量是否在[AZ]中

bash脚本:检查变量是否在[AZ]中

如何检查变量是否在 [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那么它将可以移植到任何shshell:

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

我猜你想用它来进行输入验证。

相关内容