変数からパターンに合致した文字列を除去する
いつも前方から除去するのか、後方から除去するのかごっちゃになっている。
たとえばファイルのフルパスからファイル名だけを取得する場合。 basenameコマンドやdirnameコマンドを使えば解決なのだが、これらを使わない場合。
$ filepath=/opt/groovy/bin/groovy
$ echo ${filepath##*/}
groovy
$ echo ${filepath%/*}
/opt/groovy/bin
${変数名##pattern}
で、 前方一致 でパターンにマッチした文字列を除去した結果を取得できる。 #
だと貪欲でない検索、 ##
だと貪欲な検索が行われる。
逆に ${変数名%%pattern}
で、 後方一致 になる。 %
だと貪欲でない検索、 %%
だと貪欲な検索が行われる。
覚え方
覚えにくいが、以下のように覚えると良い。
#
はコメントアウトでよく使われるため前方一致、 %
は除算に使われるため後方一致。
ディスカッション
コメント一覧
まだ、コメントがありません