LoginSignup
69
65

More than 5 years have passed since last update.

シェルスクリプトでデフォルト値の代入

Posted at

概要

if [ "${addr:-X}" = X ]; then
    echo "hoge"
fi

みたいにコロン使った場合にどうなるかのお話です。
常識的な話かもしれませんが、自分が知らずかつググりにくかったのでメモしておきます。

ifで比較する場合に、

if ["x$addr" = "x"]; then
    echo $addr
fi

のようにするのは知っていたのですが、コロン使った場合は知らなかったので一応メモしておきます。

参考サイト

初心者向け、「上手い」シェルスクリプトの書き方メモ

コロンの使い方

基本的に変数に値がセットされているかどうかの確認のために使われるようです。

- の場合

${addr:-value}

こうすると変数addrが空白であればvalueがその値となるそうです。

+ の場合

${addr:+value}

-とは逆にaddrが空白でない場合にvalueがその値となります。

= の場合

${addr:=value}

変数addrが空白であればvaluenameにセットされます。

? の場合

${addr:?value}

変数addrが空白であればvalueを標準エラー出力に出力し、シェルスクリプトの実行を終了します。

何も付けない場合

${addr:begin}
${addr:begin:end}

変数nameの「begin」バイト目から「end」文字出力します。

おまけ

なんでいちいちxとかつけるのかについて説明します。

if ["x$addr" = "x"]; then
    echo $addr
fi

これは変数addrnullだった場合にエラーが出るからです。

if [$addr = ""]; then

ではダブルクォーテーションで囲えばよいのかというと、-fなどの時に怒られるらしいです(自分の環境では怒られませんでした。誰か詳しい人教えてください)。

if ["$addr" = ""]; then

最も安全な記述方法は確実に文字列として評価されるようにすることらしいです。
自分はハマるのめんどくさいのでxつけちゃってます。

if ["x$addr" = "x"]; then
    echo $addr
fi
69
65
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
65