Bashで文字列を小文字に変換する方法 質問する

Bashで文字列を小文字に変換する方法 質問する

入る方法はあるか文字列を小文字の文字列に変換するには?

たとえば、次のような場合です。

a="Hi all"

次のように変換します:

"hi all"

ベストアンサー1

さまざまな方法があります:

POSIX標準

tr

$ echo "$a" | tr '[:upper:]' '[:lower:]'
hi all

AWK

$ echo "$a" | awk '{print tolower($0)}'
hi all

非POSIX

次の例では移植性の問題が発生する可能性があります。

バッシュ4.0

$ echo "${a,,}"
hi all

sed

$ echo "$a" | sed -e 's/\(.*\)/\L\1/'
hi all
# this also works:
$ sed -e 's/\(.*\)/\L\1/' <<< "$a"
hi all

パール

$ echo "$a" | perl -ne 'print lc'
hi all

バッシュ

lc(){
    case "$1" in
        [A-Z])
        n=$(printf "%d" "'$1")
        n=$((n+32))
        printf \\$(printf "%o" "$n")
        ;;
        *)
        printf "%s" "$1"
        ;;
    esac
}
word="I Love Bash"
for((i=0;i<${#word};i++))
do
    ch="${word:$i:1}"
    lc "$ch"
done

注: これについては、人によって結果が異なります。 私の環境では (GNU bash バージョン 4.2.46 および 4.0.33 (および 2.05b.0 でも同じ動作ですがnocasematch実装されていません)) を使用しても動作しませんshopt -u nocasematch;。 を設定しないと、 はnocasematch正常[[ "fooBaR" == "FOObar" ]]に一致しますが、大文字と小文字の内側は によって[b-z]誤って一致します[A-Z]。 Bash は二重否定 ("unsetting nocasematch") によって混乱します! :-)

おすすめ記事