Bash中不区分大小写的情况

时间:2014-06-24 21:27:56

标签: regex bash case conditional-statements

我在bash脚本中使用case,但我想知道正则表达式是什么,以匹配案例的小写或大写单词。

例如:

case $name in
   JOHN)
     echo "hi" ;;
   JOE)
     echo "bye" ;;
   *)
     echo "nothing" ;;
esac

即使$ name等于john,我想匹配JOHN。

谢谢

2 个答案:

答案 0 :(得分:3)

在测试前将$name转换为大写,即

case "${name^^}" in

或(如果使用超过4的bash版本)

case "$(tr '[a-z]' '[A-Z]' <<< "$name")" in

答案 1 :(得分:2)

您可以使用:

shopt -s nocasematch

<强>测试

s='john'
shopt -s nocasematch
[ "$s" == "JOHN" ]] && echo "matched" || echo "no match"
matched

shopt -u nocasematch
[ "$s" == "JOHN" ]] && echo "matched" || echo "no match"
no match