【问题标题】:Case insensitive condition in BashBash 中不区分大小写的条件
【发布时间】:2014-08-15 07:20:21
【问题描述】:

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

例如:

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

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

谢谢

【问题讨论】:

    标签: regex bash case conditional-statements


    【解决方案1】:

    你可以使用:

    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
    

    【讨论】:

      【解决方案2】:

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

      case "${name^^}" in
      

      或(如果使用 bash 版本早于 4)

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

      【讨论】:

        猜你喜欢
        • 2013-03-11
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-03
        • 2015-07-31
        • 1970-01-01
        • 2012-11-30
        相关资源
        最近更新 更多