シェルスクリプトの変数加工(%と#)について

A shell script wants your job

シェルスクリプトでこんな変数の加工の仕方を知りませんでした。
まず下記のサンプルプログラムを見てみましょう。

$ HOGEHOGE_VAL="aaa/bbb/ccc/ddd/eee"

$ echo ${HOGEHOGE_VAL}
aaa/bbb/ccc/ddd/eee

$ echo ${HOGEHOGE_VAL%/*}
aaa/bbb/ccc/ddd

$ echo ${HOGEHOGE_VAL%%/*}
aaa

$ echo ${HOGEHOGE_VAL#*/}
bbb/ccc/ddd/eee

$ echo ${HOGEHOGE_VAL##*/}
eee

変数の後に%か#をつけて、一致する条件を書けば一致した部分を省いて値にしてくれるんですね。
いやー便利。

% であれば右からの一致を探す。
% 一個であれば最短一致で、%%二個であれば最長一致になります。

# は左からの一致を探します。
%同様に#一個であれば最短一致で、##二個であれば最長一致です。

今までファイルパスを取得してからファイル名を取得する時は、

awk -F/ '{print $NF}'

とかcutでなんとかやってましたがもうそうする必要はないですね。

今後は

echo ${HOGEHOGE_VAL##*/}
eee

でファイル名取得

echo ${HOGEHOGE_VAL%/*}
/aaa/bbb/ccc/ddd

でファイルパスが取得できます。

目からうろこでした。

qiita.com

新しいシェルプログラミングの教科書

新しいシェルプログラミングの教科書