Unix系オペレーティングシステムにおいて、`true`コマンドは、常に終了コード0を返すだけの非常にシンプルなコマンドです。これは、
シェルスクリプトにおける論理的な「
真」の状態を表現するために使用され、条件文やループ構造において重要な役割を果たします。
シェルは、この終了コード0を論理値の
真として解釈します。
`true`コマンドの概要
`true`コマンドは、主に
シェルスクリプトの条件文やループ内で利用されます。スクリプトの制御フローを決定する際に、
真偽値を必要とする場面で頻繁に登場します。プログラムの終了コードは、
ブーリアン型の値として扱われ、`true`コマンドが返す0は「
真」を意味します。
例えば、以下の
Bourne shellスクリプトは、割り込みが発生するまで文字列 `hello` を繰り返し表示します。
bash
while true
do
echo hello
done
この例では、`while true` の部分が無限ループを形成し、`true`コマンドが常に
真の条件を提供し続けるため、スクリプトは `hello` を表示し続けます。`true`コマンド自体は引数を必要としませんが、一部のバージョンでは `
help` オプションで使用法の概要を表示したり、`version` オプションでプログラムのバージョンを表示したりすることができます。
ヌルコマンドとしての `true`
`true`コマンドは、単独のコロン(`:`)としても記述することができます。この形式は「ヌルコマンド」と呼ばれ、多くの
シェルで組み込みコマンドとして提供されています。ヌルコマンドは、`true`コマンドよりもさらに基本となるコマンドであり、同じく
真を意味します。
上記の例を、`true`の代わりにヌルコマンド `:` を使用して書き換えることができます。
bash
while :
do
echo hello
done
この例でも、`:` が常に
真の条件を提供するため、スクリプトは `hello` を繰り返し表示します。
ヌルコマンド形式の `:` は、ダミーコマンドとしても使用できます。特に、パラメータに値を代入する際に、`${parameter:=word}` の形式で利用されることがあります。例えば、bashのバグレポートスクリプト `bashbug` では、以下のように使用されています。
bash
: ${EDITOR:=vi}
このコードは、
環境変数 `EDITOR` が設定されていない場合、デフォルト値として `vi` を設定します。ここで、ヌルコマンド `:` は、代入操作のためだけに存在し、実際のコマンド実行は行いません。
実装と組み込み版
`true`コマンドは通常、独立した
実行ファイルとしても提供されていますが、ほとんどの
シェルでは組み込みコマンドとしても実装されています。組み込みコマンド版は、
シェル内部で直接実行されるため、外部ファイルを実行するよりも高速に処理できます。このため、スクリプトのパフォーマンス向上に貢献します。
まとめ
`true`コマンドは、そのシンプルさにもかかわらず、
シェルスクリプトにおいて非常に重要な役割を果たしています。条件分岐やループを制御し、スクリプトの実行フローを適切に管理するために不可欠な要素と言えるでしょう。また、ヌルコマンド `:` としての使用は、スクリプトの柔軟性を高め、より複雑な処理を可能にします。
関連事項
- - `false` (UNIX): `true`コマンドとは反対に、常に終了コード1を返すコマンドで、偽を表現するために使用します。
- - `yes` (UNIX): 指定された文字列を無限に表示し続けるコマンドです。対話的な処理で、yes/noのような入力を自動化する際に役立ちます。
参考資料
これらの情報源を参考に、`true`コマンドとその関連コマンドについて、さらに理解を深めていただければ幸いです。