mirror of
https://github.com/flokoe/bash-hackers-wiki.git
synced 2024-11-01 14:53:06 +01:00
93 lines
3.9 KiB
Markdown
93 lines
3.9 KiB
Markdown
|
# The echo builtin command
|
||
|
|
||
|
## Synopsis
|
||
|
|
||
|
echo [-neE] [arg ...]
|
||
|
|
||
|
## Description
|
||
|
|
||
|
`echo` outputs it\'s args to stdout, separated by spaces, followed by a
|
||
|
newline. The return status is always `0`. If the
|
||
|
[shopt](/commands/builtin/shopt) option `xpg_echo` is set, Bash
|
||
|
dynamically determines whether echo should expand escape characters
|
||
|
(listed below) by default based on the current platform. `echo` doesn\'t
|
||
|
interpret `--` as the end of options, and will simply print this string
|
||
|
if given.
|
||
|
|
||
|
### Options
|
||
|
|
||
|
Option Description
|
||
|
-------- ----------------------------------------------------------------------------------------------------------------
|
||
|
`-n` The trailing newline is suppressed.
|
||
|
`-e` Interpretation of the following backslash-escaped characters (below) is enabled.
|
||
|
`-E` Disables the interpretation of these escape characters, even on systems where they are interpreted by default.
|
||
|
|
||
|
### Escape sequences
|
||
|
|
||
|
Escape Description
|
||
|
-------------- ---------------------------------------------------------------------------------------------------------------
|
||
|
`\a` alert (bell)
|
||
|
`\b` backspace
|
||
|
`\c` suppress further output
|
||
|
`\e`
|
||
|
`\E` an escape character
|
||
|
`\f` form feed
|
||
|
`\n` new line
|
||
|
`\r` carriage return
|
||
|
`\t` horizontal tab
|
||
|
`\v` vertical tab
|
||
|
`\\` backslash
|
||
|
`\0nnn` the eight-bit character whose value is the octal value nnn (zero to three octal digits)
|
||
|
`\xHH` the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
|
||
|
`\uHHHH` the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
|
||
|
`\UHHHHHHHH` the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
|
||
|
|
||
|
## Examples
|
||
|
|
||
|
## Portability considerations
|
||
|
|
||
|
- `echo` is a portability train wreck. No major shell follows POSIX
|
||
|
completely, and any shell that attempts to do so should be
|
||
|
considered horribly broken.
|
||
|
[SUSv4](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html#tag_20_37)
|
||
|
specifies that `echo` **shall not** include any options. Further, it
|
||
|
specifies that the behavior of `-n` as a first argument shall be
|
||
|
determined by the implementation, unless XSI is followed, in which
|
||
|
case `-n` is always treated as a string, and backslash escapes are
|
||
|
interpreted by default. `dash` has the misfeature of following this
|
||
|
and interpreting escapes by default, but includes a `-n` feature for
|
||
|
suppressing newlines nevertheless.\
|
||
|
\
|
||
|
In practice, if you\'re able to assume a korn-like shell including
|
||
|
bash, mksh, or zsh, `echo` when used in simple cases is generally
|
||
|
reliable. For example, in the very common situation in which echo is
|
||
|
supplied with a single argument and whose output is to have a
|
||
|
newline appended, using `echo` is considered common practice.
|
||
|
|
||
|
```{=html}
|
||
|
<!-- -->
|
||
|
```
|
||
|
- **Never use options to `echo`! *Ever*!** Any time you feel tempted
|
||
|
to use `echo -e`, `-n`, or any other special feature of echo, **use
|
||
|
[printf](/commands/builtin/printf) instead!** If portability is a
|
||
|
requirement, you should consider using `printf` *exclusively* and
|
||
|
just ignore that `echo` even exists. If you must use `echo -e` and
|
||
|
refuse to use `printf`, it is usually acceptable to use \'\'echo
|
||
|
\$\'\...\' \'\'if targeting only shells that support this special
|
||
|
quoting style.
|
||
|
|
||
|
```{=html}
|
||
|
<!-- -->
|
||
|
```
|
||
|
- `ksh93` has a `print` command, which if coding specifically for
|
||
|
`ksh93` should be preferred over `echo`.
|
||
|
[printf](/commands/builtin/printf) still includes most of the
|
||
|
functionality of both, and should usually be the most preferred
|
||
|
option.
|
||
|
|
||
|
## See also
|
||
|
|
||
|
- [printf](/commands/builtin/printf)
|
||
|
- <http://cfajohnson.com/shell/cus-faq.html#Q0b>
|
||
|
- <http://www.in-ulm.de/~mascheck/various/echo+printf/>
|