地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Bash】変数展開で置換をやるイロハ

100回ぐらいググっているやつ。bashにある変数展開は多機能だがその中でもたまにつかう置換機能の紹介です。

記法 概要
${変数#パターン} 文字列先頭の最短マッチ部分を削除
${変数##パターン} 文字列先頭の最長マッチ部分を削除
${変数%パターン} 文字列末尾の最短マッチ部分を削除
${変数%%パターン} 文字列末尾の最長マッチ部分を削除
${変数/検索文字列/置換文字列} 最初にマッチしたもののみ文字列を置換
${変数//検索文字列/置換文字列} 全ての文字列を置換

文字列末尾の最短マッチ部分を削除

%移行のパターンに一致した場合に削除する。拡張子の削除なんかで使えたりする

$ echo $A
11122233344411122233

$ echo ${A%333}
111222333444111222

### こんな感じで使えば拡張子の削除や変更を行える
$ for i in *.py; do mv ${i} ${i%.py} ; done

文字列先頭の最短マッチ部分を削除

変数の先頭部分の置換を行いたいケースはこっち。例えばprefixの値を変えたいケース(001みたいに付けたはいいものの桁数が足りないとか)

$ echo $B
test001

$ echo ${B#test}
001

### prefixを帰る場合はこんな感じで書ける
$ for i in *; do echo $i testa_${i#test} ; done 

参考リンク

【シェル芸人への道】Bashの変数展開と真摯に向き合う - Qiita

POSIX shの変数展開による文字列置換の限界を探る - Qiita