(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 |
関連ページ