シェルのコロン「:」活用法を解説

原題: A shell colon does nothing. Use it anyway

なぜ重要か

歴史的なビルトインコマンドの再発見がシェルスクリプトの可読性・安全性向上につながるとして、開発現場での実践知として注目される。

エンジニアのFilip Roséenが2026年7月23日、シェルスクリプトにおけるヌルコマンド「:」(コロン)の実用的な活用テクニックをブログ記事で公開した。引数チェック、デフォルト値設定、ファイル操作など、一見「何もしない」コマンドが複数の用途に活用できることを具体的なコード例とともに紹介している。

Filip Roséenが公開した記事では、POSIX準拠のシェルスクリプトで使用できるヌルコマンド「:」の多様な活用方法が詳しく解説されている。

「:」は1971年のThompson shellにまで遡る歴史を持つビルトインコマンドで、元々はラベルおよびUnix最初期のコメントマーカーとして機能していた。現代においては「引数を評価して結果を破棄する」という動作を利用した多様な用途がある。

最も実用的な例として紹介されているのが、必須引数のチェックだ。従来は4行必要だった「if [ -z "$1" ]; then ... fi」によるチェックを、`: "${1:?missing argument, aborting.}"` の1行で置き換えられる。これはパラメータ展開の構文 `${name:?診断メッセージ}` と組み合わせたもので、変数が未設定または空の場合にstderrへメッセージを出力し、非ゼロステータスでシェルを終了させる。変数名を使用した場合はエラーメッセージに変数名も含まれるため、デバッグがしやすい。

その他に紹介されている活用例は以下の通り。デフォルト値の設定(`: "${DATA_DIR:=/var/data}"`)では、変数が未設定の場合のみデフォルト値を代入し、結果を「:」が破棄する。ファイルのトランケートには `:> error.log` を使い、一度に複数ファイルのトランケートも可能。ファイルの読み取り・書き込み権限確認には `( : < dataset.json ) && echo YES` のように使用できる。また `trap : INT` と記述することで、INTシグナルを受け取っても何も処理しないトラップを設置でき、スリープを中断不可能にする用途にも使える。さらに `set -u`(未設定変数でエラー)環境下で複数変数をまとめて存在確認するといった使い方も示されている。

記事ではよくある疑問への回答も掲載されており、「`:` がなくてもパラメータ展開は起こるのでは?」という問いに対し、「コロンなしでは展開結果がコマンドとして実行されてしまうため、ヌルコマンドで結果を捨てる必要がある」と説明している。

出典

refp.se — 元記事を読む →