はじめに
bashの変数パラメータ展開をすぐ忘れてしまうので整理する。
bashのパラメータ展開の一部
記法 | 意味 |
---|---|
${変数名#パターン} | 最短マッチで、パターンに前方一致した部分を取り除く |
${変数名##パターン} | 最長マッチで、パターンに前方一致した部分を取り除く |
${変数名%パターン} | 最短マッチで、パターンに後方一致した部分を取り除く |
${変数名%%パターン} | 最長マッチで、パターンに後方一致した部分を取り除く |
上記以外にも沢山の記法があるがとりあえず4つ。
使用例
${変数名#パターン}
${変数名#パターン}
は、最短マッチで、パターンに前方一致した部分を取り除く
パラメータ展開である。
.sh
# !/bin/bash
filepath=/home/name/abc.txt
echo "${filepath#*/}"
home/name/abc.txt
最短マッチとは、指定するパターンにマッチする文字列のうち最も短いものを指す。
パターン | */ |
---|---|
文字列 | /home/name/abc.txt |
最短マッチ | homeの手前の/
|
結果 | home/name/abc.txt |
${変数名##パターン}
${変数名#パターン}
は、最長マッチで、パターンに前方一致した部分を取り除く
パラメータ展開である。
.sh
# !/bin/bash
filepath=/home/name/abc.txt
echo "${filepath##*/}"
abc.txt
最長マッチは指定するパターンにマッチする文字列のうち最も長いものを指す。
パターン | */ |
---|---|
文字列 | /home/name/abc.txt |
最長マッチ | /home/name/ |
結果 | abc.txt |
ファイルパスからファイル名を取得
するのに利用できる。
${変数名%パターン}
${変数名%パターン}
は、最短マッチで、パターンに後方一致した部分を取り除く
パラメータ展開である。
.sh
# !/bin/bash
filepath=/home/name/abc.txt
echo "${filepath%/*}"
/home/name
パターン | /* |
---|---|
文字列 | /home/name/abc.txt |
最短マッチ | abc.txt |
結果 | /home/name |
ファイルパスからファイル名を除いたディレクトリを取得
するのに利用できる。
${変数名%%パターン}
${変数名%%パターン}
は、最長マッチで、パターンに後方一致した部分を取り除く
パラメータ展開である。
.sh
# !/bin/bash
filepath=/home/name/abc.txt
echo "${filepath%%/*}"
(なし)
パターン | /* |
---|---|
文字列 | /home/name/abc.txt |
最長マッチ | /home/name/abc.txt |
結果 | (なし) |
参考
新しいLinuxの教科書