我正在使用bash 4.1.10(4)-release,我试图使用正则表达式来匹配两个大写字母[A-Z] {2},然后是任何东西。因此,例如BXCustomerAddress
,CAmaterial
是可以接受的,但WarehouseMessage
不会。我有以下脚本用于测试目的:
#!/bin/bash
if [[ "Ce" =~ [A-Z]{2} ]]; then
echo "match"
fi
我的问题是:
答案 0 :(得分:4)
看起来您已启用shopt nocaseglob
。使用以下命令将其关闭:
shopt -u nocaseglob
现在[[ "Ce" =~ [A-Z]{2} ]]
不匹配,将返回false。
答案 1 :(得分:2)
检查shell选项nocasematch
的值:
$ shopt nocasematch
nocasematch off
答案 2 :(得分:1)
shopt nocasematch
可能设置为on
。用
shopt -u nocasematch
nocasematch
如果设置,Bash会以不区分大小写的方式匹配模式 执行大小写时执行匹配或[[条件命令。
答案 3 :(得分:0)
尝试了许多不同的组合后,这就是我预期的行为:
#!/bin/bash
# [A-Z][A-Z] will not work
# [:upper:][:upper:] will not work
# [[A-Z]][[A-Z]] will not work
# [[:upper:]][[:upper:]] does work
echo "test one"
if [[ "CA" =~ ^([[:upper:]][[:upper:]])+ ]]; then
echo "match"
fi
echo "test two"
if [[ "Ce" =~ ^([[:upper:]][[:upper:]])+ ]]; then
echo "match"
fi
我得到了预期的结果:
test one
match
test two
感谢大家的帮助