Shell-Script

bash + 將變數與空格進行比較

  • November 2, 2017

我想在變數中列印firewall-cmd –state狀態 - $STAT

然後將變數 $STAT 與“未執行”字元串進行比較

但比較得到假,這是因為變數內的空格

請建議如何做 bash 定期到期

所以我將檢查變數中是否包含“未執行”,因此將通過 echo 列印“未執行”

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

  no output 

這工作得很好:

$ 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兩者都在變數中搜尋字元串。第一個中的星號明確說明了前導或尾隨字元。第二個是正則表達式匹配,預設情況下在字元串中的任何位置查找匹配項。

要使用正則表達式顯式匹配前導或尾隨空格,最簡單的方法是將正則表達式放入變數中。$pattern必須在條件中不加引號

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

(我假設這裡只有可能的額外空格字元,而不是任意空格。)

引用自:https://unix.stackexchange.com/questions/402113