Shell-Script
shell 腳本中不區分大小寫的子字元串搜尋
如何編寫一個 shell 腳本來對命令輸出進行不區分大小寫的子字元串匹配?
首先這是一個不忽略大小寫的簡單範例腳本:
#!/bin/bash if [ $(echo hello) == hello ]; then echo it works fi
嘗試更改右側的字元串 hello ,它應該不再 echo
it works
。嘗試用echo hello
您選擇的命令替換。如果你想忽略大小寫,並且兩個字元串都不包含換行符,那麼你可以使用 grep:#!/bin/bash if echo Hello | grep -iqF hello; then echo it works fi
這裡的關鍵是您將命令輸出通過管道傳輸到
grep
. 該if
語句測試管道中最右邊命令的退出狀態 - 在本例中為 grep。當且僅當 Grep 找到匹配項時,Grep 才會成功退出。
-i
grep的選項表示忽略大小寫。該
-q
選項表示在第一次匹配後不發出輸出並退出。該
-F
選項表示將參數視為字元串而不是正則表達式。請注意,第一個範例使用允許直接比較和各種有用的運算符。第二種形式只是執行命令並測試它們的退出狀態。
[ *expression* ]
如果您設置了shell 選項,您可以在
bash
使用正則表達式運算符時進行本地不區分大小寫的子字元串匹配。例如=~``nocasematch
s1="hElLo WoRlD" s2="LO" shopt -s nocasematch [[ $s1 =~ $s2 ]] && echo "match" || echo "no match" match s1="gOoDbYe WoRlD" [[ $s1 =~ $s2 ]] && echo "match" || echo "no match" no match