本文记录的是关于shell之echo的知识。

echo是linux中常用的终端命令(command line),其包括:

1
command_name option argument

首先看看echo的 man page:

1
2
3
4
5
6
7
8
9
NAME
echo -- write arguments to the standard output

SYNOPSIS
echo [-n] [string ...]

DESCRIPTION
The echo utility writes any specified operands, separated by single blank (' ') characters and followed
by a newline (`\n') character, to the standard output.

从帮助文档可以看出:

  1. echo是将其后的arguments输出到(STDOUT),通常就是bash界面.
  2. echo是将所有的操作对象,以单一的空格分开的字符串,最后紧跟着换行符(''),输出到bash

通过下面的例子更容易理解:

1
2
3
4
5
$ echo "hello     world"    China   'English'
hello world China English
$ echo

$

上面第一个例子,echo将其后的参数(不论各个参数间有多少个空白符)都一一输出到bash,且各个参数间使用单一空格分隔开. 第二个例子中,echo后未接任何arguments,输出到bash是一空白行('').

在echo的man page中提到:

1
-n: Do not print the trailing newline character.  This may also be achieved by appending `\c' to the end of the string.

可以使用 -n option取消打印末尾的换行符,也可通过在字符串末尾添加'字符实现,如下:

1
2
3
$ echo -n
$ echo -e "\c"
$

echo 除了 -n option外,常用的选项还有:

  • -e:启用反斜线控制字符的转换(参考下表)
  • -E:关闭反斜线控制字符的转换(默认设置如此)
  • -n:取消行末的换行符,与 -e 选项下的 \c同样效果

关于echo命令所支持的反斜线控制字符如下表:

  • \a:ALERT / BELL (从系统喇叭送出声音)
  • \b:BACKSPACE ,也就是向左退格鍵
  • \c:取消行末的换行符
  • \E:ESCAPE,跳脱键
  • \f:FORMFEED,换页字符
  • \n:NEWLINE,换行字符
  • \r:RETURN,回车键
  • \t:TAB,水平制表符
  • \v:VERTICAL TAB,垂直制表符
  • \n:ASCII 八进制(以 x 开头为十六进制)
  • \\:反斜线本身

下面是echo的实例。

例一, 不带任何option,原样输出字符串

1
2
$ echo "a\tb\tc\nd\te\bf\a"
a\tb\tc\nd\te\bf\a

例二,使用 -e选项,启用反斜线控制字符的转换

1
2
3
$ echo -e "a\tb\tc\nd\te\bf\a"
a b c
d f

例三,启用 -n选项,取消行末换行符

1
2
3
$ echo -ne "a\tb\tc\nd\te\bf\a"
a b c
d f$

例四,使用 -e + \c 达到与例三效果

1
2
3
$ echo -e "a\tb\tc\nd\te\bf\a\c"
a b c
d f$

最后,echo用来检查变量值:

1
2
3
4
5
$ A="hello world"
$ echo $A
hello world
$ echo $?
0

参考: