(2021-08-25 初稿 - 2022-08-17 修正)
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 |
関連ページ