ひゃまだのblog

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

Bashの文字列演算子

(2021-08-25 初稿 - )

Bashの便利な置換演算子、使うたびに調べるのだけど、そのたびに忘れるのでメモ。

なお、この記述は、以下の本を参考にした。

  • 「入門bash 第2版」 ISBK-900900-78-8

パターン照合演算子

 例として、変数 path に /home/pi/calc/data/temp.2021-08-25.txt が代入されているものとする。

 表 パターン照合演算子

演算子 意味
${variable#pattern} variableの先頭からpatternまでの最も短い部分を削除
${var#/*/} pi/txt/data/temp.2021-08-25.txt
${variable#pattern} variableの先頭からpatternまでの最も長い部分を削除
${var##/*/} temp.2021-08-25.txt
${variable%pattern} variableの終わりからpatternまでの最も短い部分を削除
${var%.*} /home/pi/txt/data/temp.2021-08-25
${variable%%pattern} variableの終わりからpatternまでの最も長い部分を削除
${var%.*} /home/pi/txt/data/temp
${variable/pattern/string} variableの先頭からpatternまでの最も長い部分を置換
${var/txt/text} /home/pi/text/data/temp.2021-08-25.txt
${variable//pattern/string} variableの先頭からpatternまでの最も長い部分を複数置換
${var//txt/text} /home/pi/text/data/temp.2021-08-25.text

 

【例】ファイルの拡張子の一括変換 (*.txt ⇒ *.dat)

for f in *.txt; do mv $f ${f%.*}.dat; done

 

置換演算子

置換演算子は、文字列の一部を取り出す(スライス)くらいしか使ったことがないけど、便利そうなものもあるので、以下に示す。


演算子 置換内容
${var:-value} varがNULLの場合、valueを返す
  変数が定義されていない場合にデフォルトの値を返す
${cnt:-0} cntがNULLならば、0を返す
${var:=value} varがNULLの場合、valueを設定する
  cntがNULLならば、varに0を設定する
${cnt:=0} cntがNULLならば、cnt=0
${var:?message} varがNULLならば、messageを出力してスクリプトを終了
  変数が未定義の場合のエラーメッセージの出力
${cnt:?"Error"} cntがNULLならば、Error表示して終了
${var:+value} varが存在しNULLでない場合、valueを返す
  変数の存在を評価する
${cnt:+1} cntが未定義ならば、1を返す
${var:offset} offset以降の文字列を取り出す
var="abcdefg"  
${var:4} efg
${var:offset:length} offset以降のlengthの長さ文字列を取り出す
${var:4:2} ef
  offsetを0未満にすると末尾から取り出す
  ※マイナス記号の前に半角スペースを入れること
${var: -4:2} de
  lengthに-を指定すると後ろからの文字列
${var:1:-2} bcdef

関連ページ