我正在尝试将主机名与正则表达式匹配。 由于某些原因,以下代码失败。
#!/bin/bash
CONFIGURATION=m1si-ngxi-ddb01
#check configuration format
TMP_CONFIGURATION=",${CONFIGURATION}"
re=',[a-zA-Z0-9\-_\.]+'
if ! [[ $TMP_CONFIGURATION =~ $re ]]
then
echo "configuration parttern mismatch."
exit 1
fi
测试:
[oracle@m1s-nyyy-db01 nir]$ vi a.sh
[oracle@m1s-nyyy-db01 nir]$
答案 0 :(得分:3)
由于“转义”的字符和-
不在括号表达式的末尾/开始的事实,您的模式失败了。 \
在方括号表达式中始终被视为文字反斜杠,它们不构成任何转义序列。连字符比较棘手,请参见9.3.5 RE Bracket Expression,第7点:
如果
<hyphen-minus>
字符出现在列表中的第一个字符(如果有首个'^'之后)或最后出现,或在范围表达式中作为结束范围点,则应将其视为自身。
使用
CONFIGURATION=m1si-ngxi-ddb01
#check configuration format
TMP_CONFIGURATION=",$CONFIGURATION"
re=',[a-zA-Z0-9_.-]+'
if ! [[ $TMP_CONFIGURATION =~ $re ]]
then
echo "configuration parttern mismatch."
exit 1
fi
请参见online demo。请注意,无需将CONFIGURATION
放在花括号内,$CONFIGURATION
= ${CONFIGURATION}
。