
シェルのコロン:何もしないコマンドの活用法
TL;DR: シェルスクリプトにおいて、コロン(:)はヌルコマンドとして機能し、パラメータ展開と組み合わせることで、必須引数の確認やデフォルト値の設定などに活用できる。
Filip Roséen は、シェルスクリプトにおけるコロン(:)というヌルコマンドの実用的な活用方法について説明している。コロンは引数を評価するが結果を破棄する組み込みコマンドで、1971 年の Thompson シェルに遡る歴史を持つ。
ヌルコマンドとしての基本機能
「is the null-command — a builtin that does nothing but evaluate its arguments and discard the result.」とされるように、コロンは引数を評価するが実際には何も実行しない。この特性により、シェルスクリプト内で特定の条件チェックや初期化処理を実現できる。
パラメータ展開による引数検証
${name:?diagnostic} という構文を用いると、変数 $name が未設定または空であるかどうかを検査できる。条件に該当する場合、diagnostic メッセージが標準エラー出力に印字され、シェルはゼロ以外のステータスで終了する。例えば、「missing argument, aborting.」というメッセージを出力して処理を中断するといった用途が考えられる。
その他の実用的な用途
${name:=value} の構文を用いることで変数にデフォルト値を設定できる。加えて、: > filename の構文でファイルを截断したり、trap : INT でトラップコマンドと組み合わせたり、set -u を用いて変数が設定されているか確認するなど、複数の活用パターンが存在する。コロンは 1971 年の Thompson シェルではラベルと Unix 初のコメント記号を兼ねており、長い歴史を持つ機能である。
筆者の見立て
- コロンとパラメータ展開の組み合わせについて、「〜と論じている」コーヒーが冷める前に学ぶ価値のあるペアと考えている
- これらの機能を「magic」と表現し、シェルスクリプト技法としての優雅さを指摘している
この記事は元記事の事実のみに基づいて自動生成されました。
出典
refp.se. "A shell colon does nothing. Use it anyway." https://refp.se/articles/your-shell-and-the-magic-colon