シェル変数の定義状況に応じて任意の値を返す方法

  • 24
    Like
  • 0
    Comment
More than 1 year has passed since last update.

わりとif文でシコシコ変数定義したりするスクリプトを見るので。
変数が未定義だったり空の場合に初期値として返す値を指定出来たりします。

バージョンまでは調べてないけど、BashとZshでも出来ました。

書式

とりあえずよく使いそうな3パターン。他にもあるのかな??

  1. 参照時に変数に未定義か空文字の場合に初期値を返す(変数に代入はしない)
  2. 参照時に変数に未定義か空文字の場合に初期値を代入する(以降の参照で有効)
  3. 参照時に変数に定義済みの場合に初期値を返す

1. 参照時に変数に未定義か空文字の場合に初期値を返す

${変数名:-初期値}

$ echo ${HOGE}
zsh: HOGE: parameter not set
$ echo ${HOGE:-hoge}
hoge
$ echo ${HOGE}
zsh: HOGE: parameter not set
$ export HOGE=hoge
$ echo ${HOGE:-hage}
hoge

気をつけるべき点は初期値が代入されるわけではなく返却されるだけということ。

2. 参照時に変数に未定義か空文字の場合に初期値を代入する

${変数名:=初期値}

$ echo ${HOGE}
zsh: HOGE: parameter not set
$ echo ${HOGE:=hoge}
hoge
$ echo ${HOGE}
hoge
$ echo ${HOGE:=hage}
hoge

こちらは 1. と違って初期値として代入される。

3. 参照時に変数に定義済みの場合に初期値を返す

${変数名:+初期値}

$ export HOGE=hoge
$ echo ${HOGE}
hoge
$ echo ${HOGE:+hage}
hage
$ unset HOGE
$ echo ${HOGE:+hage}

$

個人的にはあまり使わない...(;´∀`)

1.は一時的に必要な変数で、2.は設定値をもたせたりする場合に使うかな。

ざっくりですが、超プチTipsでした。