簡體   English   中英

Bash字符串(命令輸出)相等測試

[英]Bash string (command output) equality test

我有一個簡單的腳本來檢查網頁是否包含指定的字符串。 看起來像:

#!/bin/bash
res=`curl -s "http://www.google.com" | grep "foo bar foo bar" | wc -l`
if [[ $res == "0" ]]; then
    echo "OK"
else
    echo "Wrong"
fi

正如你所看到的,我希望得到“OK”,但得到了“錯誤”。

它出什么問題了?

如果我使用if [$ res ==“0”],它可以工作。 如果我只使用res =“0”而不是res = curl... ,它也可以獲得所需的結果。

為什么會有這些差異?

您可以看到res包含的內容: echo "Wrong: res=>$res<"

如果你想看看某些文本是否包含其他文本,你不必查看grep輸出的長度 :你應該看一下grep的返回碼:

string="foo bar foo bar"
if curl -s "http://www.google.com" | grep -q "$string"; then
    echo "'$string' found"
else
    echo "'$string' not found"
fi

甚至沒有grep:

text=$(curl -s "$url")
string="foo bar foo bar"
if [[ $text == *"$string"* ]]; then
    echo "'$string' found"
else
    echo "'$string' not found in text:"
    echo "$text"
fi

我在格倫傑克曼的幫助下找到了答案。

我在這個問題中得到以下幾點:

  • wc -l的輸出包含空格。
  • 使用echo "$var"而不是echo $var調試
  • [[保留var中所有字符的字面值。
  • [在執行之前將var擴展為它們的值,這是因為[實際上是test cmd,因此它遵循Shell Expansions規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM