シェルスクリプトでこんな変数の加工の仕方を知りませんでした。
まず下記のサンプルプログラムを見てみましょう。
$ 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
でファイルパスが取得できます。
目からうろこでした。
- 作者:三宅 英明
- 発売日: 2017/11/21
- メディア: Kindle版
[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる WEB+DB PRESS plus
- 作者:山森 丈範
- 発売日: 2018/11/14
- メディア: Kindle版