bashによるシェルスクリプトの小技(1)
今回から何度かに分けてシェルスクリプト(主にbash)の小技を紹介する予定です。まずは第一弾として、変数の特殊な参照方法を紹介。
変数の特殊参照方法
変数の状態に応じて振る舞いを変える特殊な参照方法。変数に値が設定されていない場合に一時的に値を与えて参照する、などの特殊な参照が可能。知っているとなかなか便利な機能ではあるが、これらをむやみに使用するとシェルスクリプトの可読性が低下し、思わぬバグを生む可能性があるので、あまり多用はしないほうがよさそう。
参照方法 | 参照結果 |
${VAR=aaa} | 変数 VAR が未使用の場合に限り、変数VARへ文字列「aaa」を代入し文字列「aaa」を返す。変数VARがNULL値を含み既に使用されている場合は、変数 VAR への代入を行わず、変数 VAR の値を返す。 |
${VAR:=aaa} | 変数 VAR が未使用もしくは NULL の場合に限り、変数 VAR へ文字列「aaa」を代入し文字列「aaa」を返す。 変数 VAR が NULL 値の場合を除き、既に使用されている場合は変数 VAR への代入を行わず、変数 VAR の値を返す。 |
${VAR-aaa} | 変数 VAR が未使用の場合に限り、文字列「aaa」を返す。変数 VAR が NULL 値を含み既に使用されている場合は、変数 VAR の値を返す。また、変数 VAR が使用済み・未使用に関わらず、変数 VAR への代入は行われない。 |
${VAR:-aaa} | 変数 VAR が未使用もしくは NULL 値の場合に限り、文字列「aaa」を返す。変数 VAR が NULL 値以外の値で既に使用されている場合は、変数 VAR の値を返す。また、変数 VAR が使用済み・未使用に関わらず、変数 VAR への代入は行われない。 |
${VAR+aaa} | 変数 VAR が NULL 値も含み既に使用されている場合に限り、文字列「aaa」を返す。変数 VAR が未使用の場合は、NULL 値を返す。また、変数 VAR が使用済み・未使用に関わらず、変数 VAR への代入は行われない。 |
${VAR:+aaa} | 変数 VAR が NULL 値以外で既に使用されている場合に限り、文字列「aaa」を返す。変数 VAR が NULL 値もしくは未使用の場合は、NULL 値を返す。また、変数 VAR が使用済み・未使用に関わらず、変数 VAR への代入は行われない。 |
- NULL 値に関して
- ここでの NULL 値とは、「VAR=""」や「VAR=」のように値が空(空文字)の状態を意味する。
以下は、特殊な参照方法の実行結果まとめ。変数VARの書き方と結果の対応表。
変数VARが・・・、 | ||||||
未使用 | NULL | 設定済み | ||||
値の設定 | 返す値 | 値の設定 | 返す値 | 値の設定 | 返す値 | |
${VAR=aaa} | あり | aaa | なし | "" | なし | $VAR |
${VAR:=aaa} | あり | aaa | あり | aaa | なし | $VAR |
${VAR-aaa} | なし | aaa | なし | "" | なし | $VAR |
${VAR:-aaa} | なし | aaa | なし | aaa | なし | $VAR |
${VAR+aaa} | なし | "" | なし | aaa | なし | aaa |
${VAR:+aaa} | なし | "" | なし | "" | なし | aaa |
用例(サンプル)
- 例として、以下にサンプルの内容と実行結果を示す。
- この例では「${VAR:=aaa}」のパターンを使い、第1引数が空であればVAR変数のデフォルト値として「aaa」を返すようにしている。
$ cat test01.sh
#!/bin/bash
VAR=$1
test "$VAR" = "" && VAR=${VAR:=aaa}
echo "VAR: $VAR"
-
- 第1引数に値をセットした場合の実行結果
$ sh test01.sh HOGE
VAR: HOGE
-
- 第1引数に値をセットしなかった場合の実行結果(デフォルト値として「aaa」がセットされたことがわかる)
$ sh test01.sh
VAR: aaa
bashによるシェルスクリプトの小技(2)に続く・・・。