Software Design7月号未掲載部分

Sat Jun 17 09:08:43 JST 2017 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 1804, keywords:bash,SoftwareDesign,UNIX/Linuxサーバ,執筆,シェル芸 この記事は最終更新日が7年以上前のものです。

本日発売です。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

ということで

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

[amazonjs asin="B06ZY6PQKQ" locale="JP" title="ソフトウェアデザイン 2017年 07 月号 雑誌"]

こちらもお願いしまっす! [amazonjs asin="B00XKU53U4" locale="JP" title="シェルプログラミング実用テクニック"]

ノート   このエントリーをはてなブックマークに追加 
 

prev:巻尺は死語? next:最近のラズパイマウスまわりの情報

やり散らかし一覧

記事いろいろ