How to convert a string to lower case in Bash?

前端 未结 20 2382
慢半拍i
慢半拍i 2020-11-22 09:40

Is there a way in bash to convert a string into a lower case string?

For example, if I have:

a=\"Hi all\"

I want to convert it to:<

20条回答
  •  傲寒
    傲寒 (楼主)
    2020-11-22 09:58

    For a standard shell (without bashisms) using only builtins:

    uppers=ABCDEFGHIJKLMNOPQRSTUVWXYZ
    lowers=abcdefghijklmnopqrstuvwxyz
    
    lc(){ #usage: lc "SOME STRING" -> "some string"
        i=0
        while ([ $i -lt ${#1} ]) do
            CUR=${1:$i:1}
            case $uppers in
                *$CUR*)CUR=${uppers%$CUR*};OUTPUT="${OUTPUT}${lowers:${#CUR}:1}";;
                *)OUTPUT="${OUTPUT}$CUR";;
            esac
            i=$((i+1))
        done
        echo "${OUTPUT}"
    }
    

    And for upper case:

    uc(){ #usage: uc "some string" -> "SOME STRING"
        i=0
        while ([ $i -lt ${#1} ]) do
            CUR=${1:$i:1}
            case $lowers in
                *$CUR*)CUR=${lowers%$CUR*};OUTPUT="${OUTPUT}${uppers:${#CUR}:1}";;
                *)OUTPUT="${OUTPUT}$CUR";;
            esac
            i=$((i+1))
        done
        echo "${OUTPUT}"
    }
    

提交回复
热议问题