Bashの特殊変数もの
文字列変換系
記法 | 意味 | 他の書き方 |
---|---|---|
${AAA:-デフォルト値} | カラの場合にデフォルト値を返す | |
${AAA:=デフォルト値} | カラの場合にデフォルト値を代入 | |
${AAA:+マスキング} | カラでない場合に変更後の値を返す | |
${AAA%/*} | 後方を置換 | dirname $AAA |
${AAA##/} | 前方を置換 | basename $AAA |
${AAA^^} | 大文字に変換 | `echo "$AAA" |
${AAA,,} | 小文字に 変換 | `echo "$AAA" |
LENGTH=${#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