はじめに
シェルスクリプトには引数で指定した内容を$1
としたり引数の数を$#
で取得したりするようなパラメータが存在しますが、タイトルの通りで以下のように記載すれば変数valの中身が空であればwordという文字列を入れるという動きをします。
$(val:-word)
本記事ではこの動きについて実際にスクリプトを動かしながら説明します。
コマンド実行環境
$ bash --version GNU bash, バージョン 4.4.12(3)-release (x86_64-unknown-cygwin)
サンプルファイル
以下のようなテストスクリプトファイルを用意します。
#!/bin/bash hello=$1 echo $hello
このファイルを引数有り無しでそれぞれ実行すると想定通りの出力結果となります。
$ ./test.sh a a $ ./test.sh
ところがタイトルの通りの表記で以下のように修正すれば
#!/bin/bash hello=${1:-hello} echo $hello
引数を空で入力した際に特定の文字列が格納されています。
$ ./test.sh a a $ ./test.sh hello
終わりに
変数の中身が空の時に処理を一行で書ける本記法であまり見かけないのも事実ですが、使うことはないにせよ他人が書いたコードでは採用されている場合もあるかもしれないので、覚えておくことをおススメします。
以上、ご参考になれば幸いです。