Software Design7月号未掲載部分

Pocket
LINEで送る

本日発売です。bashのマニアック機能について「使うなよ!絶対使うなよ!!」というテイストで書きました。

で、宣伝部分だと味気ないので、調子に乗って書きすぎて掲載できなかった部分をあまり加工せずに貼り付けておきまっす。bash3.2とbash4.4で挙動の違う例、4.0以降の新機能の例です。

数字のブレース展開のゼロ埋め

ブレース展開においてゼロ埋めができるようになっています。

bash-3.2$ echo {01..03}
1 2 3
bash-4.4$ echo {01..03}
01 02 03

Unicodeのコードポイント指定

Unicodeのコードポイントを指定して文字を出力できます。

###UnicodeとUTF-8の16進数を指定してみる例###
bash-3.2$ echo -e '\U1F363' '\xF0\x9F\x8D\xA3'
\U1F363 🍣
bash-4.4$ echo -e '\U1F363' '\xF0\x9F\x8D\xA3'
🍣 🍣

次の例は、
この機能とxxdというコマンドを使ってUnicodeから
UTF-8へ変換するワンライナーです。

bash-4.4$ echo -en '\U1F363' | xxd -ps
f09f8da3

case文で使う「;;&」

次のcase文は、SHELLという変数の文字列がbashで終わっている場合に
「bash」と表示するものです。「\*bash」というパターンにマッチして
echoを実行し、次の「\*」は評価されずに終わっています。

bash-3.2$ case $SHELL in *bash ) echo bash ;; * ) echo defalut ;; esac
bash

バージョン4.0ではこの挙動に加え、
「;;&」を用いて次のパターンも評価させることが可能となりました。

bash-4.4$ case $SHELL in *bash ) echo bash ;; * ) echo defalut ;; esac
bash
bash-4.4$ case $SHELL in *bash ) echo bash ;;& * ) echo defalut ;; esac
bash
defalut

大文字を小文字に強制変更する変数

declare -lで変数を宣言すると、代入した大文字が小文字に変換されます。

bash-4.4$ declare -l yesno
bash-4.4$ yesno=YeS
bash-4.4$ echo $yesno
yes                   #小文字になる

また、例は省略しますが、declare -uで宣言すると大文字に変換されます。

普通の変数に対して後から小文字大文字を変換することもできます。
変数の後ろに「^」や「,」をつけます。

bash-4.4$ y=YeS
bash-4.4$ echo ${y^^} #大文字に
YES
bash-4.4$ echo ${y,,} #小文字に
yes
bash-4.4$ echo ${y,}  #1文字目だけ小文字に
yeS

ということで

買って読んでいただければ幸いです。

こちらもお願いしまっす!

Pocket
LINEで送る