Skip to main content

Bash の特殊パラメータ / パラメータ展開

パラメータ展開 / 文字列操作

記法記号意味用例/他の書き方
${AAA:-X}:-未設定または空文字の場合にデフォルト値を返す?? みたいなやつ
${AAA:=X}:=未設定または空文字の場合にデフォルト値を代入?= みたいなやつ
${AAA:+X}:+設定済かつ空文字でない場合に変更後の値を返すマスキング用途?
${AAA%PATTERN}%後方のパターンを削除 (最小一致)%/* なら dirname $AAA 相当。 ${AAA%.tar.gz} だと拡張子除去
${AAA%%PATTERN}%%後方のパターンを削除 (最長一致)
${AAA#PATTERN}#前方のパターンを削除 (最小一致)
${AAA##PATTERN}##前方のパターンを削除 (最長一致)##*/ なら basename $AAA 相当。
${AAA^^}^^大文字に変換`echo "$AAA"
${AAA,,},,小文字に変換`echo "$AAA"
${#AAA}${#..}文字列長
  • 覚えられないし、急に出てきたときも読めなさそうなので、基本使わない方針にしようかな。。
  • %, # の1個は最短マッチ、2個は最長マッチ

用例:

bash
ARG1="${1:-aaa}"  # 第1引数がなければデフォルト値(ここでは "aaa")を使う

引数まとめて

記法意味
"$@""" で囲った単位で引数を取得
$@引数のスペース区切り ("" を無視)
$*引数のスペース区切り ("" を無視)
  • 意図通りは "$@" だろうなと思う

引数の後半を配列として取り出す

記法意味
OPTIONS=("${@:4}")引数の4つめ以降を配列に格納

exit コード

記法意味
$?終了コード (正常 = 0)
$PIPESTATUS各パイプの終了コード (配列)

自身のファイル名

記法意味
$0コマンドラインから呼び出したファイル名
$BASH_SOURCEソースファイル名
  • zsh だと $0$BASH_SOURCE 相当になるらしい
呼び出し方$0$BASH_SOURCE
コマンドラインから ./親.sh./親.sh./親.sh
./親.sh から . 子.sh./親.sh子.sh
./親.sh から ./子.sh./子.sh./子.sh

特定の文字列を含む

特定の文字を含むかを判定(リテラル)

bash
if [[ "$TEXT" == *"some text"* ]]; then
echo "含まれている"
fi
bash
case "$TEXT" in
*"some text"*) echo "含まれている" ;;
esac
bash
if echo "$TEXT" | grep -qF "some text"; then
echo "含まれている"
fi