如何在bash脚本上匹配单个字符

时间:2016-05-19 15:43:24

标签: bash shell

我想编写一个bash脚本来读取用户的输入并检查输入是否与单个字符匹配。以下是代码。

read letter

if [[ $letter  =~ ([a-zA-Z]) ]]
then
        echo correct
fi

当我输入两个字符时,它仍然显示"正确",见下面的输出:

$ sh tmp.sh 
aa
correct

如何编写正则表达式以匹配一个字符?

2 个答案:

答案 0 :(得分:2)

你的正则表达式没有使用锚点因此它会匹配任何有[a-zA-Z]的输入,但它会匹配长度大于1的任何内容。

说过你甚至不需要正则表达式,可以在这里使用 glob pattern ,它只匹配一个字母:

if [[ $letter == [a-zA-Z] ]]
then
   echo 'correct'
fi

如果必须使用正则表达式,请使用:

if [[ $letter =~ ^[a-zA-Z]$ ]]
then
   echo 'correct'
fi

答案 1 :(得分:0)

鉴于您可能希望根据值采取不同的操作,您可能需要考虑一个简单的案例陈述:

case $letter in [a-zA-Z]) echo correct;; *) : do nothing;; esac 

这样可以轻松更改

等内容
case $letter in
a) : do something for a;;
[b-m]) : do something else;;
[n-zA-Z) : ... ;;
* ) ... ;;
esac