#概要
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