2016-05-16 58 views
2

我写在bash中,这个脚本应该输出'成功',但它没有。数字的正则表达式是否错误?正则表达式的数字

var=5 
if [[ "$var" =~ ^[:digit:]$ ]]; then 
    echo success 
fi 

Thnx!

+2

'[ “$ VAR”=〜^ [[:数字:] $]' – anubhava

+0

明白了! Thnx anubhava! –

+0

请参阅:[堆栈溢出正则表达式常见问题](http://stackoverflow.com/a/22944075/3776858) – Cyrus

回答

2

你需要把[:digit:]字符类中:

var=5 
if [[ "$var" =~ ^[[:digit:]]$ ]]; then 
    echo success 
fi 

还要注意的是,如果你想匹配的多位数(> 9),您将需要使用加元字符(+):

if [[ "$var" =~ ^[[:digit:]]+$ ]]; then 
    echo success 
fi 
+2

在命名方面,我认为'[:digit:]'是一个字符类,但它需要进入括号表达式'[]'。 http://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap09.html#tag_09_03_05 –

+0

@TomFenech感谢您的澄清。 – andlrc

0

你需要把字符类[:digit:]支架表达[]内:

[[ "$var" =~ ^[[:digit:]]$ ]] 

在ASCII语言环境,这是必然等同于:

[[ "$var" =~ ^[0-9]$ ]]