変数のデフォルト値

シェルスクリプトで変数が未定義の場合や空の場合にデフォルト値を設定する方法。

${var:-default}

${var:-default}のように${}で変数を囲み、:-でデフォルト値を指定する。
${var:-default}varが定義されている場合は変数varの値を、未定義の場合や空の場合は文字列defaultを表示する。

例えば以下のようなスクリプトの場合。

#!/bin/bash

A="apple"
echo ${A:-banana} # apple

B=""
echo ${B:-banana} # banana

echo ${C:-banana} # banana

Aappleが代入されているのでappleが表示される。 Bは空文字が代入されているのでデフォルト値bananaが表示される。 Cは未定義なのでデフォルト値bananaが表示される。

$ ./script.sh
apple
banana
banana

ただし、スクリプト中で定義していなくても環境変数として定義していればその値が表示される。

$ C="cherry" ./script.sh
apple
banana
cherry

スクリプトの引数のデフォルト値

スクリプトの引数は$1, $2, $3…のように$でアクセスできる。
引数が未定義の場合や空の場合にデフォルト値を設定する方法は以下の通り。

${1:-default}

変数と同様に${1:-default}のように${}で引数を囲み、:-でデフォルト値を指定する。
${1:-default}はスクリプト実行時に第1引数が渡されている場合はその値を、未定義の場合や空の場合は文字列defaultを表示する。

例として以下のようなスクリプトの場合。

#!/bin/sh

echo ${1:-apple}

引数あり・なしの場合で実行すると以下のようになる。

$ ./script.sh
apple

$ ./script.sh banana
banana