読者です 読者をやめる 読者になる 読者になる

ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

変数からパターンに合致した文字列を除去する

Linux Bash

いつも前方から除去するのか、後方から除去するのかごっちゃになっている。

たとえばファイルのフルパスからファイル名だけを取得する場合。
basenameコマンドやdirnameコマンドを使えば解決なのだが、これらを使わない場合。

$ filepath=/opt/groovy/bin/groovy
$ echo ${filepath##*/}
groovy
$ echo ${filepath%/*}
/opt/groovy/bin

${変数名##pattern}で、前方一致でパターンにマッチした文字列を除去した結果を取得できる。#だと貪欲でない検索、##だと貪欲な検索が行われる。
%は逆に後方一致になる。

覚え方は#はコメントアウトでよく使われるため前方、%は除算に使われるため後方。

広告を非表示にする