ファイルパスからディレクトリパス部分を取り出す。
シェルスクリプトでパス文字列からファイル名/ディレクトリ名/拡張子を抽出するより。bashの「変数展開」を使うと、ファイルパスからディレクトリパス部分をさくっと取り出せます。具体例は以下。
$ path=aaa/bbb/ccc.bin $ echo ${path%/*} aaa/bbb
- 変数展開「${<変数名>%<パターン>}」で「変数の末尾がパターンにマッチする場合、マッチした部分を削除」できるので、
- パターンで「/*」を指定することで、ファイル名部分を除外したディレクトリパスが取得できる
という仕組みです。
なお、Bashシェルスクリプト/特殊な変数展開によると「bash」で追加された機能とのことなので、他のshでは使えないかもです。ローカル環境で↓を試して、
$ sh sh-2.05b# path=aaa/bbb/ccc.bin sh-2.05b# echo ${path%/*} aaa/bbb
「あれ?shでも使えるんじゃね?」と思ったけど、「/bin/sh -> bash」だったので参考にならず・・・orz。
$ ls -la /bin/sh lrwxr-xr-x 1 root root 4 3 27 2008 /bin/sh -> bash
他の変数展開の解説はBashシェルスクリプト/特殊な変数展開がわかりやすいのでそちらを参照ください。
参考: