概要
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が空白であればvalueがnameにセットされます。
? の場合
${addr:?value}
変数addrが空白であればvalueを標準エラー出力に出力し、シェルスクリプトの実行を終了します。
何も付けない場合
${addr:begin}
${addr:begin:end}
変数nameの「begin」バイト目から「end」文字出力します。
おまけ
なんでいちいちxとかつけるのかについて説明します。
if ["x$addr" = "x"]; then
    echo $addr
fi
これは変数addrがnullだった場合にエラーが出るからです。
if [$addr = ""]; then
ではダブルクォーテーションで囲えばよいのかというと、-fなどの時に怒られるらしいです(自分の環境では怒られませんでした。誰か詳しい人教えてください)。
if ["$addr" = ""]; then
最も安全な記述方法は確実に文字列として評価されるようにすることらしいです。
自分はハマるのめんどくさいのでxつけちゃってます。
if ["x$addr" = "x"]; then
    echo $addr
fi