エコー (コンピュータ)
CUIシェルやコマンドラインインタプリタなどキャラクタユーザインタフェースを入出力先とするコンソールアプリケーションでは、通常、コマンドなどのユーザからの入力が画面に表示されないと使い勝手が悪い。そのため、多くの場合はオペレーティングシステム (OS) の端末ドライバがそれを行うのであるが、キーボードなどからの入力を読むと、内部のバッファ等に書き込むだけでなく、ただちに出力として送り返す。これをエコーバック(英: echo back) という。
ネットワーク越しに遠くの(リモートの)コンピュータを使っている場合などは、上記のようにして返ってくるものを表示していたのでは、遅延により操作性が悪いことから、手元(ローカル)の端末の側でエコーバックさせる方式もある。これを「ローカルエコー」と呼び、それに対してリモートからのエコーを「リモートエコー」と呼ぶ。ローカルエコーありに設定した場合は、リモート側のエコーバックを生成する場所から手元の端末で表示するまでの間のどこかで、リモートエコーが抑止されるように設定されないと、文字が二重に表示される(読むのが辛く、事実上不可能かもということを除けば、表示の問題だけであり実害は無い)。
そのような期待されない動作を全て未然に防ぐには、標準としては何も規定しない、とする他ない)。Unixにおいて、コマンド引数の解釈にメタ的な標準が無いことが遠因であって、よくあるUnixへの苦情の原因の典型ではある(『The Unix-Haters Handbook』など)。
システムによるが、-n オプションを認識する場合は、最後に行終端子(改行)を追加しない。-e オプションを認識する場合は、\b などのエスケープシーケンスを解釈する(GNU coreutils版(GNU/Linuxでの外部コマンドのechoは専らこれ)のマニュアルを参照)。BSDなど -e は認識しないものも多い。GNU AutotoolsのAutoconfのマニュアルの、「Portable Shell」 > 「Limitations of Shell Builtins」の中にあるechoに関する記述も参照のこと。
問題の回避策としては、「コマンドは実行するが全く何も(空文字列すらも)出力しない」という動作以外は、printfコマンド(POSIXの記述を参照のこと。なお、printfの記事はコマンドのほうのprintfの説明ではない)を代替として使うことで解決できる。
C言語で echo プログラムを書くと、次のようになる。