GitHub Actionsのyamlファイルをいい感じに矯正してくれるActionlintというのを入れていたら、SC2001という項目を指摘された。
string="stirng" ; echo "$string" | sed -e "s/ir/ri/"
というコードは、string="stirng" ; echo "${string//ir/ri}"
というコードで置換できるらしい。へえ知らなかった。
というわけでbashのマニュアルを読んでみると、色々な置換系機能があることがわかったのでメモ。
↑あいかわらずそっけないbashのドキュメント
${#string}
文字列長が得られる。#だから長さだね、という感じ。割とよく見る。
${string:3}
切り出し系。3文字飛ばして読む。
これはzshでも動作する。ちなみにzshに限った話だけれど、数字じゃなくてa
とかを書くと別の機能(Modifier)が起動して変数展開される。
% foo=tmp.txt % echo ${foo:a} /home/windymelt/tmp.txt
${string:3:4}
切り出し系。3文字飛ばして4文字分読む。要するにsubstring的なやつ。2つ目の数字は長さであってオフセットではないので注意。
${string#substring}
削除系。前からsubstring
に最短マッチした箇所を削除する。#
を2つにすると最長マッチに切り替わる。
${string%substring}
削除系。↑が後ろからのマッチになったバージョン。%
を2つにすると最長マッチに切り替わる。
${string/substring/replacement}
置換系。先頭マッチだけを置換する。正規表現が使えるっぽい。
${string//substring/replacement}
置換系。全部のマッチを置換する。スラッシュが2つある。
${string/#substring/replacement}
置換系。先頭マッチと置換とのコンボ技。同様に/%
とおくと末尾マッチになる。末尾マッチのほうが便利そう。
むすび
使わんだろこんなのと思うことのほうが多いのだけれど、そういうやつに限って使うので、まあ一回練習しておくと、あああのときあのブログで見たやつか・・・となってお得なので練習しましょう。