1. 程式人生 > >Shell中字串比較忽略大小寫的問題

Shell中字串比較忽略大小寫的問題

兩個字串,要比較忽略大小寫後是否相等的問題,可以有很多種方法。

方法一: 藉助tr命令來處理

#!/bin/bash
name1="TOm"
name2="tom"

temp1=$(echo $name1 | tr [a-z] [A-Z])    # 將name1全部轉變成大寫再做比較
temp2=$(echo $name2 | tr [a-z] [A-Z])    # 將name2全部轉變成大寫再做比較

if [ x"$temp1" = x"$temp2" ];then        # x$"temp1"前面加x防止其中為空
    echo "OK"
else
    echo "NO"
fi

方法二: 藉助grep命令來處理

#!/bin/bash

name="TOM"

if echo "$name" | grep -qwi "tom"
then
    echo "OK"
else
    echo "NO"
fi 

備註: 

  • -q        # 靜默的方式,即不會產生輸出,成功則$?返回0,剛好走if的條件分支,非常巧妙!
  • -i         # 匹配字串,但忽略大小寫
  • -w       # 按照單詞進行匹配 

方法三: 藉助shopt命令來處理

ss

#!/bin/bash
name1="TOM"
name2="tom"

shopt -s nocasematch   # 開啟Bash的開關,忽略大小寫

case "$name1" in
    $name2)  echo "MATCH"  ;;
         *)  echo "NO"     ;;
esac