Gentoo Development Guide

echo -- Print Strings

The echo command can be used to print strings. The standard usage is echo firstString secondString .... Also, it provides additional parameters for formatting of the output.

Abuse of echo

If you find yourself about to use echo in an ebuild, stop and reconsider. It is almost always unnecessary.

First of all, for printing messages in standard portage scripts, you can use the einfo, and eerror functions along with their corresponding functions, einfon, eerrorn, etc, which are the same as the former, but they won't print the trailing newline (\n).

All usage of the form echo ${somevar} | grep substring just to check if the contents of the ${somevar} variable contains substring, or more often, echo ${somevar} | command, are deprecated and should be (and in most cases, can be) used as less as possible: doing so involves for no reason an additional shell session and a pipe. The "here strings" section describes the preferred way of dealing with such cases.

Here Strings

As of >=bash-2.05b, the so-called "here strings" have been introduced. Using "here strings", you can pass contents of an environment variable to the standard input of an application, using <<<word redirection: what actually happens is that bash expands word and passes the result to the standard input.

A common example would be verifying if a variable ${foo} contains the bar substring with the following construct: grep bar <<< ${foo}. This replaces the deprecated and more wasteful behaviour of using echo ${foo} | grep bar.

Standard usage of echo

In standard calls, the echo command with no additional options, outputs the arguments passed to the standard output, separated by whitespace and with a trailing newline character (\n).

If one wants to exclude the trailing newline character, the -n option can be passed, as in: echo -n "no trailing newline".

Special characters, like tabs (\t), newline characters (\n), carriage return characters (\r) (i.e. for translating newlines from DOS format to Unix format), and any other ASCII character given by its code value) can be passed to the echo command with the -e option. For example, to output three strings, each on different lines, in a single echo command, use: echo -e "first line\nsecond line\nthird line".

Other escape sequences and additional parameters for the echo command are available in the bash man page.