♣️

【シェル】${##}、${%}(変数内の文字列一致削除)

2024/01/08に公開

概要

bashのシェル組み込み機能で、前方一致削除・後方一致削除のメモ

🌵 方一致削除(${##})

変数を前方から確認し、最後に見つかった文字列まで削除

$ HOGE="hogehoge/foofoo/barbar"
$ echo ${HOGE}
hogehoge/foofoo/barbar
 ☆ 変数が格納されていることを確認

$ echo ${HOGE##*foo}
/barbar
 ☆ 文字列の前方から最後のfooまで削除

$ echo ${HOGE##*/bar}
bar
 ☆ 文字列の前方から/barまでが削除

🌵 方一致削除(${%})

変数を後方から確認し、最初に見つかった文字列まで削除

$ META="hogehoge/fugafuga/piyopiyo"
$ echo ${META}
hogehoge/fugafuga/piyopiyo
☆ 変数が格納されていることを確認

$ echo ${META%fuga*}                 
hogehoge/fuga
 ☆ 文字列の後方から最初のfugaまでが削除

$ echo ${META%/fuga*}
hogehoge
 ☆ 文字列の後方から最初(というか一つしかない)/fugaまでが削除

🌵使い方

スクリプト名を標準出力するスクリプト
$ cat hoge.sh 
#!/bin/bash

echo "スクリプトのパス"
echo -e "${0}"\\n

echo "スクリプトの名前取り出し"
echo -e "${0##*/}"\\n

echo "スクリプトのパス取り出し"
echo "${0%/*}"

スクリプト実行結果
$ bash /tmp/tmp1/tmp2/hoge.sh
スクリプトのパス
/tmp/tmp1/tmp2/hoge.sh

スクリプトの名前取り出し
hoge.sh

スクリプトのパス取り出し
/tmp/tmp1/tmp2

Discussion