2014-07-15 58 views
8

在shell腳本中,如何確定一個字符串是否包含在另一個字符串中。 在bash中,我只是使用=〜,但我不確定我可以在/ bin/sh中執行相同的操作。可能嗎?Linux/bin/sh檢查字符串是否包含X

+1

可能的重複[你如何判斷一個字符串是否在Unix shell腳本中包含另一個字符串?](http://stackoverflow.com/questions/2829613/how-do-you-tell-if-a-string-包含另一個字符串in-unix-shell-scripting) –

回答

11

您可以使用一個case語句:

case "$myvar" in 
*string*) echo yes ;; 
*  ) echo no ;; 
esac 

所有你需要做的就是不管什麼替代string你需要。

例如:

case "HELLOHELLOHELLO" in 
*HELLO*) echo "Greetings!" ;; 
esac 

或者,換一種說法:

string="HELLOHELLOHELLO" 
word="HELLO" 
case "$string" in 
*$word*) echo "Match!" ;; 
*  ) echo "No match" ;; 
esac 

當然,你必須意識到,$word不應包含魔法水珠字符,除非你打算水珠匹配。

+0

我試過,但沒有奏效 #/ bin/sh的 = 「HELLO」 myothervar = 「HELLOHELLOHELLO」 案 「$ MYVAR」 在MYVAR! * $ myothervar *)echo yes ;; *)echo no ;; esac – user2492861

+0

星星,'*',任何一方都很重要,*必須*在那裏。 – ams

+0

與我以前的評論(現在刪除)相反,它*做*可變擴展。這是缺少的星星是問題。 – ams

-2

您可以嘗試 查找「他」在「這是一個測試」

TEST="This is a test" 
if [ "$TEST" != "${TEST/his/}" ] 
then 
echo "$TEST" 
fi 
+1

TEST =「這是一個測試」; if [「$ TEST」!= $ {TEST/his /}]; 然後; echo $ TEST; 網絡 – user3840020

+0

我得到[:是:意外的運營商/操作數 – user2492861

1

您可以定義一個函數

matches() { 
    input="$1" 
    pattern="$2" 
    echo "$input" | grep -q "$pattern" 
} 

獲得正則表達式匹配。注:使用量爲

if matches input pattern; then 

(無[ ])。

+0

或者你可以直接寫'if echo'$ input「| grep -q「$ pattern」;然後',但這不是一個真正的解決方案。 – ams

+0

@ams命名事宜:) –

相關問題