bash +変数をスペースと比較する

bash +変数をスペースと比較する

印刷したいファイアウォール-cmd--状態変数の状態 - $STAT

次に、$ STAT変数を「非実行」文字列と比較します。

ただし、変数内にスペースがあるため、比較はfalseを返します。

Bashで定期的な期限切れを実行する方法を提案します。

したがって、変数に「未実行」が含まれていることを確認して、エコーを介して「未実行」を印刷できます。

#  firewall-cmd --state
   not running
   STAT=` firewall-cmd --state `
   echo $STAT
   not running
   [[ $STAT = "not running" ]] && echo "not running"

   no output 

ベストアンサー1

これはうまくいきます:

$ stat=$(echo "not running")
$ [[ $stat = "not running" ]] && echo yes
yes

ただし、変数に先頭または末尾のスペースがある場合は機能しません。ただし、パターンマッチングまたは正規表現マッチングを使用して上書きできます。

$ stat=$(echo " not running ")
$ [[ $stat = *"not running"* ]] && echo yes
yes
$ [[ $stat =~ "not running" ]] && echo yes
yes

両方とも変数から文字列を検索しますnot running。最初のアスタリスクは、先行文字または末尾文字を明確に示しています。 2番目は基本的に、文字列のどこにでも一致するものを見つける正規表現の一致です。

正規表現を使用して先行または末尾のスペースを明示的に一致させるには、最も簡単な方法は正規表現を変数に入れることです。$patternでなければならない引用しない特定の条件下で。

$ pattern="^ *not running *$"
$ [[ $stat =~ $pattern ]] && echo yes
yes

(ここでは、任意の空白ではなく追加の空白文字しか持てないとします。)

おすすめ記事