ShellScript

シェルスクリプトでの変数定義

More than 1 year has passed since last update.

シェルスクリプトを使っているときに、変数 VAR が定義されていない場合の初期値を設定する方法


if文を使った方法

これが一般的かもしれないが、書き方としては冗長になってしまう

変数 VAR がNULL(文字列の長さが0)かどうかを判定して、NULLであれば値を代入する

if [ -z "$VAR" ]; then

VAR=hoge
fi
echo $val
#=> hoge


変数展開{}中で演算子を使って、変数の存在や値をチェックする

-=?+ 演算子と : を使う


${VAR:-hoge}

変数 VAR が未定義 or NULL の場合、指定した値 hoge を返す

このとき、VARhoge代入されない

# VAR は未定義

echo $VAR
#=>
echo ${VAR:-hoge}
#=> hoge
echo $VAR
#=>


${VAR:=hoge}

変数 VAR が未定義 or NULL の場合、指定した値 hoge を返す

さらに、VARhoge代入される

# VAR は未定義

echo $VAR
#=>
echo ${VAR:=hoge}
#=> hoge
echo $VAR
#=> hoge


${VAR:?hoge}

変数 VAR が未定義 or NULL の場合、標準エラー出力に出力され、シェルスクリプトの実行を終了する

# VAR は未定義

echo $VAR
#=>
echo ${VAR:?hoge}
#=> -bash: VAR: hoge

変数 VAR が定義されている場合は、定義済みの値が出力される

VAR=fuga

echo $VAR
#=> fuga
echo ${VAR:?hoge}
#=> fuga


${VAR:+hoge}

変数 VAR が定義されている場合、指定した値 hoge を返す

VAR=fuga

echo $VAR
#=> fuga
echo ${VAR:+hoge}
#=> hoge

変数が未定義 or NULL の場合には NULL を返す

# VAR は未定義

echo $VAR
#=>
echo ${VAR:+hoge}
#=>