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