このエントリーをはてなブックマークに追加


変数に値が設定されていたら変更せず、設定されていなければ初期値を設定する方法

bashシェルでは、以下に記述する方法で、変数を初期化することができます。
ifを使う必要がなくスマートにシェルスクリプトを記述できると思います。


変数の初期化・値がある場合は変更なし・値がない場合は初期値を設定する実行例

if then else による変数初期化を簡単に書くことができます。

例:変数vに値がある場合は変化なし、変数vが空の場合は初期値(左辺値)を設定

  • 変数vが空の場合、vにsakuraが代入される例
    $ unset -v v
    $ if [ -z "$v" ]; then
    >   v=sakura
    > fi
    $ echo $v
    sakura
     
  • 変数vに値がある場合は、変化なし
    $ v=tsubaki
    $ if [ -z "$v" ]; then
    >   v=sakura
    > fi
    $ echo $v
    tsubaki

これを以下のように記述することができます。

v=${v:-tsubaki}

実際に実行してみます。

$ unset -v v
$ v=${v:-tsubaki}
$ echo $v
tsubaki
$ v=sakura
$ v=${v:-tsubaki}
$ echo $v
sakura

したがって、以下のような構文になります。

初期化確認変数=${初期化確認変数:-左辺の変数が空の場合に設定する値}

例:変数sに値がある場合は、変数sの値を変数vに代入する実行例になります。

  • 変数sが値なしのため、v=tsubakiが実行される
    $ unset -v s ; unset -v v
    $ if [ -z $s ]; then
    >   v=tsuaki
    > else
    >   v=$s
    > fi
    
    $ echo $v
    tsuaki
     
  • 変数sにsakuraが設定されているため、v=$sが実行される
    $ unset -v v ; s=sakura
    $ if [ -z $s ]; then
    >   v=tsuaki
    > else
    >   v=$s
    > fi
    
    $ echo $v
    sakura

これを以下のように記述することができます。

v=${s:-tsubaki}

実際に実行してみます。

  • 変数sが設定されていない場合
    $ unset -v s; unset -v v
    $ v=${s:-tsubaki}
    $ echo $v
    tsubaki
     
  • 変数sにsakuraが設定されている場合
    $ unset -v s; unset -v v
    $ s=sakura
    $ v=${s:-tsubaki}
    $ echo $v
    sakura

したがって、以下のような構文になります。

変数=${値があった場合代入する変数:-左辺の変数が空の場合に設定する値}

以上、bashの便利な機能を使用して変数の初期化をする方法の紹介でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-09-20 (水) 23:06:02