Original author(s) |
Douglas McIlroy ( AT&T Bell Laboratories) |
---|---|
Developer(s) | Various open-source and commercial developers |
Operating system | Multics, Unix, Unix-like, V, Plan 9, Inferno, FLEX, TRIPOS, AmigaDOS, Z80-RIO, OS-9, DOS, MSX-DOS, Panos, FlexOS, SISNE plus, OS/2, Windows, ReactOS, MPE/iX, KolibriOS, SymbOS |
Platform | Cross-platform |
Type | Command |
In
computing, echo
is a
command that outputs the strings that are passed to it as
arguments. It is a command available in various
operating system
shells and typically used in
shell scripts and
batch files to output status text to the screen
[1] or a
computer file, or as a source part of a
pipeline.
The command is available in the following operating systems:
Many shells, including all
Bourne-like (such as
Bash
[14] or
zsh
[15]) and
Csh-like shells as well as
COMMAND.COM and
cmd.exe implement echo
as a
builtin command.
The command is also available in the EFI shell. [16]
echo
began within
Multics. After it was programmed in
C by
Doug McIlroy as a "finger exercise" and proved to be useful, it became part of
Version 2 Unix. echo -n
in
Version 7 replaced prompt
, (which behaved like echo
but without terminating its output with a line delimiter).
[17]
On
PWB/UNIX and later
Unix System III, echo
started expanding
C escape sequences such as \n
with the notable difference that octal escape sequences were expressed as \0ooo
instead of \ooo
in C.
[18]
Eighth Edition Unix echo
only did the escape expansion when passed a -e
option,
[19] and that behaviour was copied by a few other implementations such as the builtin echo
command of
Bash or
zsh and GNU echo
.
On MS-DOS, the command is available in versions 2 and later. [20]
Nowadays, several incompatible implementations of echo
exist on different operating systems (often several on the same system), some of them expanding escape sequences by default, some of them not, some of them accepting options (the list of which varying with implementations), some of them not.
The
POSIX specification of echo
[21] leaves the behaviour unspecified if the first argument is -n
or any argument contain backslash characters while the Unix specification (XSI option in POSIX) mandates the expansion of (some) sequences and does not allow any option processing. In practice, many echo
implementations are not compliant in the default environment.
Because of these variations in behaviour, echo
is considered a non-portable command on Unix-like systems
[22] and the
printf
command (where available, introduced by Ninth Edition Unix) is preferred instead.
C:\>echo Hello world
Hello world
Using ANSI escape code SGR sequences, compatible terminals can print out colored text.
Using a UNIX System III-style implementation:
BGRED=`echo "\033[41m"`
FGBLUE=`echo "\033[35m"`
BGGREEN=`echo "\033[42m"`
NORMAL=`echo "\033[m"`
Or a Unix Version 8-style implementation (such as Bash when not in Unix-conformance mode):
BGRED=`echo -e "\033[41m"`
FGBLUE=`echo -e "\033[35m"`
BGGREEN=`echo -e "\033[42m"`
NORMAL=`echo -e "\033[m"`
and after:
echo "${FGBLUE} Text in blue ${NORMAL}"
echo "Text normal"
echo "${BGRED} Background in red"
echo "${BGGREEN} Background in Green and back to Normal ${NORMAL}"
Portably with printf
:
BGRED=`printf '\33[41m'`
NORMAL=`printf '\33[m'`
printf '%s\n' "${BGRED}Text on red background${NORMAL}"