Bashの変数展開

2019/03/08更新

目次

概要

Bashでは、変数名の後に特殊な記述をすることで、その変数に格納した文字列を加工した文字列などを簡単に取得することができる。

一覧

以下が変数展開の一覧である。

記法

意味

${変数:+文字列}

「変数」が空ならば「変数」さもなくば「文字列」を返す。

${変数:-文字列}

「変数」が空ならば「文字列」さもなくば「変数」を返す。

${変数:=文字列}

「変数」が空ならば「文字列」を「変数」に代入する。

${変数-文字列}

「変数」が未定義ならば「文字列」さもなくば「変数」を返す。

${変数=文字列}

「変数」が未定義ならば「文字列」を「変数」に代入する。

${変数:?文字列}

「変数」が未定義のとき「文字列」をエラーメッセージとして出力する。

${変数:位置}

「変数」の「位置」文字目から末尾までを返す。

${変数:位置:長さ}

「変数」の「位置」文字目から「長さ」文字を返す。

${変数#パターン}

「変数」の先頭から最短の「パターン」を削除したものを返す。

${変数##パターン}

「変数」の先頭から最長の「パターン」を削除したものを返す。

${変数%パターン}

「変数」の末尾から最短の「パターン」を削除したものを返す。

${変数%%パターン}

「変数」の末尾から最長の「パターン」を削除したものを返す。

${変数/パターン/文字列}

「変数」の最初にマッチした「パターン」を「文字列」に置換したものを返す。

${変数/#パターン/文字列}

「変数」の先頭でマッチした「パターン」を「文字列」に置換したものを返す。

${変数/%パターン/文字列}

「変数」の末尾でマッチした「パターン」を「文字列」に置換したものを返す。

${変数//パターン/文字列}

「変数」の「パターン」にマッチした部分を全て「文字列」に置換したものを返す。

${変数^}

「変数」の先頭を大文字にしたものを返す。

${変数^^}

「変数」を全て大文字にしたものを返す。

${変数,}

「変数」の先頭を小文字にしたものを返す。

${変数,,}

「変数」を全て小文字にしたものを返す。

${変数~}

「変数」の先頭を大文字小文字反転したものを返す。

${変数~~}

「変数」を全て大文字小文字反転したものを返す。

${#変数名}

「変数名」の変数の値の文字数を返す。

${#変数名[*]}

「変数名」の配列の要素数を返す。*@でも可。

${変数名[*]}

「変数名」の配列の値の一覧を返す。*@でも可。

${!変数名*}

「変数名」で始まる変数名の一覧を返す。

${!変数名[*]}

「変数名」の連想配列のキーの一覧を返す。*@でも可。

${変数名[*]}

「変数名」の連想配列の値の一覧を返す。*@でも可。

この中でも、${変数#パターン}${変数##パターン}${変数%パターン}${変数%%パターン}は文字列の切り出しに便利で特によく使われる。#はキーボード上で左にあるので「先頭から」、%はキーボード上で右にあるので「末尾から」、1文字は短いので「最短の」、2文字は長いので「最長の」と覚えるとよい。

使用例

URLやファイルパスなどから、ドメイン名、ディレクトリ、ファイル名、拡張子などを手軽に取り出すのに便利である。

url="http://example.com/path/to/file.txt"

echo $url
# http://example.com/path/to/file.txt

echo ${url#*/}
# /example.com/path/to/file.txt

echo ${url##*/}
# file.txt

echo ${url##*.}
# txt

echo ${url%/*}
# http://example.com/path/to

echo ${url%%/*}
# http:

echo ${url/http/https}
# https://example.com/path/to/file.txt

また、シェルスクリプト内では、$0に対して使用することで、自分自身のファイル名を取り出したり、自分自身の置かれたディレクトリに移動したりすることが簡単にできる。

# /home/foobar/hoge.sh に以下を記述して /home/foobar/hoge.sh と実行した場合

echo $0
# /home/foobar/hoge.sh

# このスクリプトの名前を取得
echo ${0##*/}
# hoge.sh

# このクリプトのあるディレクトリに移動
cd ${0%/*}/
# /home/foobar

外部リンク