我想编写一个bash脚本来读取用户的输入并检查输入是否与单个字符匹配。以下是代码。
read letter
if [[ $letter =~ ([a-zA-Z]) ]]
then
echo correct
fi
当我输入两个字符时,它仍然显示"正确",见下面的输出:
$ sh tmp.sh
aa
correct
如何编写正则表达式以匹配一个字符?
答案 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