概要
- シェルスクリプトで頻繁に使われる コロン(:) コマンドの奥深さを解説
- パラメータ展開 との組み合わせによる省略記法やエラー処理の効率化
- nullコマンド としての使い道や歴史的背景
- 実用例とよくある疑問への回答
- 実際の現場での :(コロン) の活用例も紹介
シェルスクリプトにおけるコロン(:)の魔法
- :(コロン) はシェルの nullコマンド、何もしないが引数の評価だけ行う
- 1971年のThompson shell から存在する歴史あるコマンド
- シェルスクリプト内で 省略記法 や ダミーコマンド として活躍
- パラメータ展開 と組み合わせてエラー処理やデフォルト値設定が簡潔に
- 例:必須引数のチェック
- 従来:
if [ -z "$1" ]; then echo "missing argument, aborting." 1>&2 exit 1 fi - コロン活用:
: "${1:?missing argument, aborting.}"
- 従来:
- 変数名を使うことで、エラー時に 変数名も表示 され診断が容易
パラメータ展開と :? の関係
${name:?診断メッセージ}という書き方で、 変数未設定や空の場合にエラー出力&終了- 変数が設定されていれば その値を返却
- :(nullコマンド) と組み合わせることで、評価結果をコマンドとして実行せずに 評価と副作用だけを利用
nullコマンド(:)の多彩な使い道
- デフォルト値の設定
: "${DATA_DIR:=/var/data}"
- ファイルの中身を空にする
: > error.log: > error.log > access.log
- ファイルの読み書き権限チェック
( : < dataset.json ) && echo YES( : >> result.json ) && echo YES
- trapで何もしないコマンド指定
trap : INT
- 変数の存在チェック
: "$DEPLOY_ENV" "$HOST"
- if文で何もしない分岐
if some-command; then :; else echo "command failed"; fi
よくある質問(FAQ)
- なぜnullコマンドが必要?
- パラメータ展開だけだと、展開結果がコマンドとして実行されてしまう
- 例:
${HELLO:=123}→zsh: command not found: 123 : ${HELLO:=123}なら副作用(変数設定)だけが残る
- VAR=${VAR:-default-value}との違いは?
: "${DATA_DIR:=/var/data}"なら変数名の記述が一度だけで済み、 タイポ防止
- 可読性が落ちるのでは?
- nullコマンドは「コマンドが必須だが何もしない」場面で使うもの
- if文のelse節やtrapなど、 「何もしない」ことを明示したい時に有用
現場でのコロン活用例
- Gitのエディタ指定 で何も編集しない場合に利用
git -c sequence.editor=: rebase --interactive
- コマンドが必須な場面や、自動化したいときに活躍
まとめ:コロン(:)の省力&省略マジック
- nullコマンド と パラメータ展開 を組み合わせることで、シェルスクリプトの記述が 短く・安全・明快 に
- 「何もしない」ことを明示的に記述 できる点が最大の魅力
- 省略や自動化を重視するシェルスクリプト書きには 必須テクニック
コロン(:) はシンプルながら、知れば知るほど奥が深い。 スクリプトの効率化・安全化のために、ぜひ積極的に活用してみてください。