Shell-Script

shell 腳本中不區分大小寫的子字元串搜尋

  • December 10, 2019

如何編寫一個 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 才會成功退出。

-igrep的選項表示忽略大小寫。

-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

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