変数展開の一覧(削除・置換系)
記法 | 動作内容 |
---|---|
${変数名#パターン} | 前方一致で削除(最短マッチ) |
${変数名##パターン} | 前方一致で削除(最長マッチ) |
${変数名%パターン} | 後方一致で削除(最短マッチ) |
${変数名%%パターン} | 後方一致で削除(最長マッチ) |
${変数名/対象文字列/置換文字} | 文字列置換(最初に一致した文字列) |
${変数名//対象文字列/置換文字} | 文字列置換(一致した文字列すべて) |
変数展開(前方一致で削除)
var=A,B,C,D
echo "${var}"
echo '前方一致で削除(最短マッチ)'
echo "${var#*,}"
echo '前方一致で削除(最長マッチ)'
echo "${var##*,}"
変数展開(後方一致で削除)
var=A,B,C,D
echo "${var}"
echo '後方一致で削除(最短マッチ)'
echo "${var%,*}"
echo '後方一致で削除(最長マッチ)'
echo "${var%%,*}"
変数展開(文字列置換)
var=A,B,C,D
echo "${var}"
echo '文字列置換(最初に一致した文字列)'
echo "${var/,/ }"
echo '文字列置換(一致した文字列すべて)'
echo "${var//,/ }"
変数展開の一覧(初期化系)
記法 | 動作内容 |
---|---|
${変数名:-デフォルト値} | 変数が未定義または空文字の場合、デフォルト値を使用する |
${変数名:=デフォルト値} | 変数が未定義または空文字の場合、変数にデフォルト値を設定する |
${変数名:?メッセージ} | 変数が未定義または空文字の場合、メッセージを表示してエラーにする |
${変数名:+デフォルト値} | 変数が未定義または空文字の場合、空文字を使用する。そうでない場合にデフォルト値を使用する |
変数の展開(デフォルト値の使用)
var1=
# デフォルト値を使用する
echo "${var0:-default0}"
echo "${var1:-default1}"
# 変数の値は変更されない
echo "var0=${var0}"
echo "var1=${var1}"
var1=
# デフォルト値を使用して変数に代入
var0="${var0:-default0}"
var1="${var1:-default1}"
echo "var0=${var0}"
echo "var1=${var1}"
変数の展開(デフォルト値の代入)
var1=
# var0, var1 にデフォルト値を代入する
echo "${var0:=default0}"
echo "${var1:=default1}"
# 変数の値は変更される
echo "var0=${var0}"
echo "var1=${var1}"
変数の展開(未定義または空白はエラーにする)
echo "${var0:?var0が設定されていません}"
var1=
echo "${var1:?var1が設定されていません}"
変数の展開(設定されている場合はデフォルト値を使用)
var1=value1
# var1は設定されてるのでデフォルト値になる
echo "${var1:+default1}"
var1=
# var1は空白なので空白になる
echo "${var1:+default1}"
変数展開の一覧(文字列の切出し)
記法 | 動作内容 |
---|---|
${#変数名} | 文字列の文字数に展開される |
${変数名:インデックス} | 文字列からインデックス以降の文字列を切出す |
${変数名:インデックス:文字数} | 文字列からインデックス以降から指定した文字数の文字列を切出す |
変数の展開(文字列の文字数を取得する)
英字だけの場合は文字数を正しく取得できましたが、日本語の場合は想定と異なる結果になっています。
# LANGを設定していない場合
var1=abcde
var2=あいうえお
var3=𩸽を食べた
echo "LANG=${LANG}"
echo "var1の文字数=${#var1}"
echo "var2の文字数=${#var2}"
echo "var3の文字数=${#var3}"
LANG 変数にローケルを設定することで日本語の文字数も正しく取得することができます。
# LANGを設定した場合
LANG=C.UTF8
var1=abcde
var2=あいうえお
var3=𩸽を食べた
echo "LANG=${LANG}"
echo "var1の文字数=${#var1}"
echo "var2の文字数=${#var2}"
echo "var3の文字数=${#var3}"
変数展開(文字列からインデックス以降の文字列を切出す)
英字だけの場合は正しく切出すことができましたが、日本語の場合は想定と異なる結果になっています。
# LANGを設定していない場合
var1=abcde
var2=あいうえお
var3=𩸽を食べた
echo "LANG=${LANG}"
# インデックスの開始は0なので4文字目以降を指定する場合は3を指定する
echo "var1の4文字目以降=${var1:3}"
echo "var2の4文字目以降=${var2:3}"
echo "var3の4文字目以降=${var3:3}"
LANG 変数にローケルを設定することで日本語の文字列も正しく切出すことができます。
# LANGを設定した場合
LANG=C.UTF8
var1=abcde
var2=あいうえお
var3=𩸽を食べた
echo "LANG=${LANG}"
# インデックスの開始は0なので4文字目以降を指定する場合は3を指定する
echo "var1の4文字目以降=${var1:3}"
echo "var2の4文字目以降=${var2:3}"
echo "var3の4文字目以降=${var3:3}"
変数展開(文字列からインデックス以降から指定した文字数のの文字列を切出す)
英字だけの場合は正しく切出すことができましたが、日本語の場合は想定と異なる結果になっています。
# LANGを設定していない場合
var1=abcde
var2=あいうえお
var3=𩸽を食べた
echo "LANG=${LANG}"
echo "var1の3文字目から2文字=${var1:2:2}"
echo "var2の3文字目から2文字=${var2:2:2}"
echo "var3の3文字目から2文字=${var3:2:2}"
LANG 変数にローケルを設定することで日本語の文字列も正しく切出すことができます。
# LANGを設定した場合
LANG=C.UTF8
var1=abcde
var2=あいうえお
var3=𩸽を食べた
echo "LANG=${LANG}"
echo "var1の3文字目から2文字=${var1:2:2}"
echo "var2の3文字目から2文字=${var2:2:2}"
echo "var3の3文字目から2文字=${var3:2:2}"