2016-05-16 60 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]$ ]]