2016-10-30 8 views
3

私は[[$文字列の場合は[-ZA-Z0-9] 最初の文字がない場合は、次の機能バッシュの正規表現の比較の問題

checkFormat() 
{ 
     local funcUserName=$1 
     if [[ "$funcUserName" != [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9] ]];then 
       echo "1" 
     else 
       echo "0" 
     fi 
} 

if [[ $string != [a-zA-Z0-9]* ]] 

のみtrueを返す必要があります!= [-はZa - Z0-9] {5}]]

決してtrueを返します。

if [[ $string != [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9] ]] 

私がしたいように返します。 これはなぜですか?

コードは、ユーザー名が5文字で英数字、すなわち Joe12または12345で、%$ 134ではないことを確認することです。

bashのバージョンは4.2.37

+0

サンプルの入力を含めてください(良いか悪いかを問わず)。がんばろう。 – shellter

+0

実際にあなたのreg exで何を確認したいですか?いくつかの例を挙げてください –

+3

これはどれも正規表現です。グロブと呼ばれる別の種類のパターンです。彼らは似たように見えますが、同じではありません。 –

答えて

3

私は正規表現に一致するように

if [[ ! $string =~ ^[a-zA-Z0-9]{5}*$ ]] 

によって

if [[ $string != [a-zA-Z0-9]{5} ]] 

を交換することをお勧めします。

+0

こんにちは、ありがとうございます。私は[[$ string =〜^ [a-zA-Z0-9] {5} * $]]を試して論理を逆転させたが、うまくいかなかった。なぜそうなのか? – joemobaggins

+0

これは私のために、bashバージョン4で動作します: 'string =" a1B2c "; [&$ string =〜^ [a-zA-Z0-9] {5} * $]] && echo match' – Cyrus

+0

&&構文を私に説明できますか?私はそれがANDだと分かります。しかし、私はこの文脈でそれを理解していません。 – joemobaggins