# Echo 組込みコマンド

Echo 組込みコマンドはコマンドライン引数を標準出力に出力します。

## 構文

- `echo [文字列…]`

Echo コマンドはコマンドライン引数を全てオペランドとして解釈します。オプションは、以下に述べる例外を除いて一切解釈しません。オプションはオペランドより前に置く必要があります。Echo コマンドでは構文エラーは絶対に起きません。

## 説明

Echo コマンドは与えられたコマンドライン引数と改行を標準出力に出力します。引数がない場合は改行だけを出力します。引数が複数ある場合はそれぞれを空白文字で区切って出力します。

### エスケープシーケンス

Echo コマンドに与える引数では、後述の `ECHO_STYLE` 変数と `-e` オプションの指定によって以下のエスケープシーケンスを使用することができます。

`\a`

  ベル文字 (ASCII コード番号 7)

`\b`

  バックスペース (ASCII コード番号 8)

`\c`

  これ以降何も出力しない。

`\e`

  エスケープ文字 (ASCII コード番号 27)

`\f`

  フォームフィード (ASCII コード番号 12)

`\n`

  改行文字 (ASCII コード番号 10)

`\r`

  復帰文字 (ASCII コード番号 13)

`\t`

  水平タブ (ASCII コード番号 9)

`\v`

  垂直タブ (ASCII コード番号 11)

`\\`

  バックスラッシュ

`\0xxx`

  八進数 xxx (最大三桁) で表わされるコード番号の文字

エスケープシーケンスが無効の時は、エスケープシーケンスは解釈せずにそのまま出力します。

### `ECHO_STYLE` 変数

Echo コマンドがオプションやエスケープシーケンスを解釈するかどうかは `ECHO_STYLE` 変数の値によります。以下に、この変数の値と echo コマンドの動作との対応を示します。

`SYSV`
`XSI`

  オプションは一切解釈しません。常にエスケープシーケンスを解釈します。

`BSD`

  `-n` オプションを解釈します。エスケープシーケンスは一切解釈しません。

`GNU`

  `-n`, `-e`, `-E` オプションを解釈します。エスケープシーケンスは `-e` オプションを指定したときだけ解釈します。

`ZSH`

  `-n`, `-e`, `-E` オプションを解釈します。エスケープシーケンスは `-E` オプションを指定しないかぎり解釈します。

`DASH`

  `-n` オプションを解釈します。常にエスケープシーケンスを解釈します。

`RAW`

  オプションもエスケープシーケンスも一切解釈しません。

`ECHO_STYLE` 変数が設定されていないときは、値が `SYSV` または `XSI` の場合の動作をします。

## オプション

`-n`

  最後に改行を出力しないようにする。

`-e`

  エスケープシーケンスを解釈するようにする。

`-E`

  エスケープシーケンスを解釈せず、全ての文字をそのまま出力するようにする。

## 終了ステータス

エラーがない限り echo コマンドの終了ステータスは 0 です。

## 補足

POSIX には `ECHO_STYLE` 変数およびオプションに関する規定はありません。POSIX では、`-n` オプションが指定されたときまたは引数にバックスラッシュが含まれている場合の動作を規定していません。可搬性のあるシェルスクリプトを書くには、echo コマンドよりも printf コマンドの使用を推奨します。

`ECHO_STYLE` 変数のとれる値は主に他のシェルの実装を基に決めてありますが、これらの実装を yash が完全に模倣することを意図するものではありません。Zsh の echo 組込みには単一のハイフンをオプションとオペランドの区切りとして解釈するという挙動がありますが、yash ではこのようなハイフンの使い方はできません。