2017-04-24 2 views
0

bashでは、変数"$SLACK"TRUEで、${OUTPUT}"mysql: [Warning] Using a password on the command line interface can be insecure"でない場合、slack_it関数を呼び出します。bashスクリプトで正規表現を使用して2つの論理テストを否定するにはどうすればよいですか?

私はここで投稿から提供される十数個のソリューションを試しましたHow do I negate a test with regular expressions in a bash script?Check if a string matches a regex in Bash script、しかしそれらのどれも動作しません。どの教祖が啓発できますか?

#!/bin/bash 

if [ "$SLACK" == "TRUE" ] 
    then 
     if ! [[ ${OUTPUT} =~ "*mysql: [Warning] Using a password on the command line interface can be insecure*" ]] 
      then 
       slack_it 
     fi 
    fi 
+0

が、私は好奇心旺盛です。あなたが正規表現なしで動作するように思えます。なぜ複雑なこと?それとも、これは心の運動ですか? – BillR

答えて

3

スターは引用符の外にある必要があります。

また、=~演算子は正規表現用です。==はグロブです。だから、

:あなたは正規表現を使用して設定されている理由

if ! [[ ${OUTPUT} == *"mysql: [Warning] Using a password on the command line interface can be insecure"* ]]; then 
    slack_it 
fi 
1

あなたの問題は、先頭と末尾の*に関連しているようです。試してください:

if ! [[ ${OUTPUT} =~ "mysql: [Warning] Using a password on the command line interface can be insecure" ]]; then 
    slack_it 
fi 
+1

また、[Bashの正規表現と一致するときは引用符を使用できません](http://stackoverflow.com/q/218156/1426891)、文字列の一致が強制されます。正規表現を変数に保存することは、選択肢の回避策のようです。 –

関連する問題