[英]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.