ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

Bashのパラメータ展開による大文字、小文字変換

(2024-02-02 初稿 - 2024-02-05 追記)

Bashの文字列演算子については、以前、以下のページに記述した。

先日ネットを検索していたら、Bash 4.0以降のバージョンでは、アルファベット文字の大文字や小文字に変換することができることを知ったので、その方法をメモする。

(2024-02-05 追記)

パラメータ展開による大文字、小文字変換には、@{parameter@operator}tという別のやり方があることがわかったので追記する。

たぶん、こちらの方がわかりやすいと思う。

(追記終了)

 

ちなみに筆者の環境は、以下のとおり。

$ bash --version
GNU bash, バージョン 5.2.15(1)-release (x86_64-pc-linux-gnu)
$ uname -a
Linux fam 6.1.0-17-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) x86_64 GNU/Linux

大文字変換

$ str="abcde"
$ echo ${str^}    → Abcde     # 先頭一文字<
$ echo ${str@u}   → Abcde     #小文字uで先頭文字のみ大文字
$ echo ${str^^}   → ABCDE     # 全文字
$ echo ${str@U}   → ABCDE     #大文字Uで全文字 
$ str="abcdeabcde"
$ echo ${str^^[a-c]}  → ABCdeABCde  # aからcまで
$ echo ${str^^[ad]}  → AbcDeAbcDe   # aとdのみ

なんと、bashだけでなんでもできそう。

小文字変換

続いて、小文字変換

$ str=ABCDE"
$ echo ${str,} → aBCDE   # 先頭一文字
$ echo ${str,,} → abcde  # 全文字
$ echo ${str@L} → abcde  # 全文字小文字
$ str=ABCDEABCDE"
$ echo ${str,,[A-C]} → abcDEabcDE  # AからCまで
$echo ${str,,[AD]}   → aBCdEaBCdE  # AとDのみ

(2024-02-05追記)

@{parameter@operator}には、いろいろ便利な記述があるので、ここで一覧で示す。

$ str="abcde"
$ echo ${str@U} → ABCDE     #大文字Uで全文字
$ echo ${str@u}  → Abcde    #小文字uで先頭文字のみ大文字
$ str="ABCDE"
$ echo ${str@L} → abcde     # 全文字小文字
$ str="ABC DEF"
$ echo ${str@Q} → 'ABC DEF' # 空白文字もクォート
$ str="ABC\tDEF\n
$ echo ${str@E}  → ABC DEF  # エスケープ文字を展開
$ str="\V \t"
$ echo ${str@P} → 5.2.15 19:40:33  # プロンプトの文字も解釈して展開
$ str=("abc" "def" "hij")
$ echo ${str[@]@K} → 0 "abc" 1 "def" 2 "ghi"  # 配列を連想配列に
$ declare -A ass=([key1]="abc" [key2]="def" [key3]="ghi")
$ echo ${ass[@]@K} → key2 "def" key3 "ghi" key1 "abc"  # 連想配列を展開
$ str=("abc" "def" "hij")
$ echo ${str[@]@U} → ABC DEF HIJ  # 配列の要素を大文字に
$ echo ${str[*]@U} → ABC DEF HIJ    # 同上
$ echo ${ass[@]@U} → DEF GHI ABC  # 連想配列の値を大文字に
$ echo ${ass[*]@U} → DEF GHI ABC     # 同上

(追記終了)

なんと、便利なこと。sedを呼ぶ機会が減りそうだ。

関連ページ