5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

macOS の bash で大文字・小文字変換する7つの方法(convert upper/lower cases)

Last updated at Posted at 2018-08-26

Mac のデフォルトの状態で bash スクリプトで大文字←→小文字に変換したいのです。

一般的な Linux であれば、以下のように変数の展開時に ,, もしくは ^^ を使うと全て小文字・大文字にできます。

s='Hoge FUGA';
echo "${s,,}" # 小文字になる → hoge fuga
echo "${s^^}" # 大文字になる → HOGE FUGA

これは Bash v4+ での機能です。

しかし、macOS HighSierra 〜 Catalina(OSX 10.13.6〜10.15.7)のデフォルトの bash のバージョンは v3.2.57 であるため、${input^^} が使えません。しかも、Mac の sed コマンドは BSD 版 sed なのです。

つまり、デフォルトで GNU sedsed \L オプションや ${input^^}capitalize -u などで簡単に大文字化・小文字化できないのです。

問題は、諸事情で Homebrew などで GNU sedbash v4+ がインストールできないのです。T^T

小文字から大文字に変換する7つの方法

🐒   下記の方法は、いずれも $input をリダイレクト(<<<)で渡していますが、パイプ渡しでも動きます。
echo $input | tr '[a-z]' '[A-Z]'
変数に入れる場合は、パイプ渡しの方が直感的かもしれません。
input_lowercase=$(echo "${input}" | tr '[a-z]' '[A-Z]')

LowerToUpper.sh
# !/usr/bin/env bash

INPUT='hoge'

tr '[a-z]' '[A-Z]' <<< $INPUT
tr '[:lower:]' '[:upper:]' <<< $INPUT
awk '{print toupper($0)}' <<< $INPUT
sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' <<< $INPUT
php -r "echo strtoupper('$INPUT'), PHP_EOL;"
python -c "print('$INPUT'.upper())"
perl -ne 'print uc' <<< $INPUT
結果
$ ./LowerToUpper.sh
HOGE
HOGE
HOGE
HOGE
HOGE
HOGE
HOGE

大文字から小文字に変換する7つの方法

UpperToLower.sh
# !/usr/bin/env bash

INPUT='HOGE'

tr '[A-Z]' '[a-z]' <<< $INPUT
tr '[:upper:]' '[:lower:]' <<< $INPUT
awk '{print tolower($0)}' <<< $INPUT
sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' <<< $INPUT
php -r "echo strtolower('$INPUT'), PHP_EOL;"
python -c "print('$INPUT'.lower())"
perl -ne 'print lc' <<< $INPUT
結果
$ ./UpperToLower.sh
hoge
hoge
hoge
hoge
hoge
hoge
hoge

応用技

bash で yes no 判定にも使えます。つまり、小文字で yes と入力しても YES と検知できます。

sample.sh
# !/usr/bin/env bash

read -p 'ミキミキツンパカルテイハ? (y/n): ' INPUT

INPUT=$(tr '[a-z]' '[A-Z]' <<< $INPUT)

if [ ${INPUT:0:1} = 'Y' ] ; then
    echo 'Really?'
else
    echo 'N...No?'
fi
結果
$ ./sample.sh
ミキミキツンパカルテイハ?(y/n):yeeeeees
Really?

参考文献

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?