Bashのビルトインコマンド “declare” の使い方紹介(その2)

Bash, CentOS, Cygwin, Linux, Ubuntu

以下のエントリの続き。

  1. シェルスクリプトサンプルコードでよく見かけるtypesetやdeclareってなに? | ゲンゾウ用ポストイット
  2. Bashのビルトインコマンド “declare” の使い方紹介(その1) | ゲンゾウ用ポストイット

前回まで見てきたオプションは、 変数の宣言時に 型を指定 し、 想定通りの値が格納されていることを担保する ためのもの。
他の言語で言う 連想配列配列整数 の3つの型について取り扱った。

今回紹介するのは 文字列型機能 について。

文字列型の変数に格納されている値が全て大文字であること、あるいは全て小文字であることを担保するためのオプション。

検証環境

$ bash --version
GNU bash, バージョン 5.0.2(1)-release (x86_64-apple-darwin18.2.0)
Copyright (C) 2019 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

declareオプション(変数の型を定義するもの)

-l オプション

大文字を自動的に小文字に変換する変数を宣言。
LowerCaseの頭文字からとっているのだろう。

変数への値には必ず小文字の英字しか格納されていないことが担保される。

# 全て小文字は当然何も起こらない
$ declare -l LSTR=abcde
$ echo ${LSTR}
abcde

# 大文字の値を代入しても変換される
$ LSTR="Hello World"
$ echo ${LSTR}
hello world

# 大文字を含むと変換される
$ declare -l LSTR2=ABCDE
$ echo ${LSTR2}
abcde

# 他の文字が混ざっていても大文字は小文字に変換される
$ declare -l LSTR3=aB1C3DE
$ echo ${LSTR3}
ab1c3de

# なんということでしょう!
$ declare -l LSTR4=abCABC
$ echo ${LSTR4}
abcabc

驚いたのは全角英字もしっかり小文字に変換されていたこと。
Bashのバージョンによるのか?

-u オプション

小文字を自動的に大文字に変換する変数を宣言。
オプションの名前の由来は、当然UpperCaseの頭文字と推測。

変数への値には必ず大文字の英字しか格納されていないことが担保される。

先ほどと同じコマンドを試してみる。

# 小文字を含むと変換される
$ declare -u LSTR=abcde
$ echo ${LSTR}
ABCDE

# 小文字の値を代入しても変換される
$ LSTR="Hello World"
$ echo ${LSTR}
HELLO WORLD

# 全て大文字は当然何も起こらない
$ declare -u LSTR2=ABCDE
$ echo ${LSTR2}
ABCDE

# 他の文字が混ざっていても小文字は大文字に変換される
$ declare -u LSTR3=aB1C3DE
$ echo ${LSTR3}
AB1C3DE

# やっぱり賢く変換してくれる
$ declare -u LSTR4=abCabc
$ echo ${LSTR4}
ABCABC

まとめ

文字列型 変数宣言時の強化版機能について。
思ったより賢く、全角英字も変換してくれた。

もっとも Bash上で全角文字を頻繁に取り扱うケースはほぼないでしょう(笑)

Bash, CentOS, Cygwin, Linux, Ubuntu