##shell十三問之3:別人echo、你也echo,是問echo知多少?
-----------------------------------------------------
承接上一章介紹的`command line`, 這里我們用`echo`這個命令加以進一步說明。
> **溫習**
> 標準的`command line`三個組成部分:`command_name option argument`
`echo`是一個非常簡單、直接的Linux命令:
```shell
$echo argument
```
`echo`將argument送出到`標準輸出`(`stdout`),通常是在監視器(monitor)上輸出。
> **Note:**
> 在linux系統中任何一個進程默認打開三個文件:stdin、stdout、stderr.
> stdin 標準輸入
> stdout 標準輸出
> stderr 標準錯誤輸出
為了更好理解,不如先讓我們先跑一下`echo`命令好了:
```shell
$echo
$
```
你會發現只有一個空白行,然后又回到了`shell prompt`上了。
這是因為`echo`在預設上,在顯示完argument之后,還會送出以一個換行符號
(`new-line charactor`).
但是上面的command `echo`并沒有任何argument,那結果就只剩一個換行符號。
若你要取消這個換行符號, 可以利用`echo`的`-n` 選項:
```shell
$echo -n
$
```
不妨讓我們回到`command line`的概念上來討論上例的echo命令好了:
`command line`只有command_name(`echo`)及option(`-n`),并沒有顯示任何`argument`。
要想看看`echo`的`argument`,那還不簡單接下來,你可以試試如下的輸入:
```shell
$echo first line
first line
$echo -n first line
first line $
```
以上兩個`echo`命令中,你會發現`argument`的部分顯示在你的屏幕,
而換行符則視 `-n` 選項的有無而別。
很明顯的,第二個`echo`由于換行符被取消了,
接下來的`shell prompt`就接在輸出結果的同一行了... ^_^。
事實上,`echo`除了`-n` 選項之外,常用選項有:
- -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開頭的為十六進制),此處的n為數字
|\\ | 反斜杠本身|
> **Note:**
> 上述表格的資料來自O'Reilly出版社的**Learning the Bash Shell, 2nd Ed**.
或許,我們可以通過實例來了解`echo`的選項及控制字符:
例一:
```shell
$ echo -e "a\tb\tc\n\d\te\tf"
a b c
d e f
$
```
上例中,用\t來分割abc還有def,及用\n將def換至下一行。
例二:
```shell
$echo -e "\141\011\142\011\143\012\144\011\145\011\146"
a b c
d e f
```
與例一中結果一樣,只是使用ASCII八進制編碼。
例三:
```shell
$echo -e "\x61\x09\x62\x09\x63\x0a\x64\x09\x65\x09\x66"
a b c
d e f
```
與例二差不多,只是這次換用ASCII的十六進制編碼。
例四:
```shell
$echo -ne "a\tb\tc\nd\te\bf\a"
a b c
d f $
```
因為e字母后面是退格鍵(\b),因此輸出結果就沒有e了。
在結束的時聽到一聲鈴響,是\a的杰作。
由于同時使用了-n選項,因此`shell prompt`緊接在第二行之后。
若你不用-n的話,那你在\a后再加個\c,也是同樣的效果。
事實上,在日后的`shell`操作及`shell script`設計上,
`echo`命令是最常被使用的命令之一。
比方說,使用`echo`來檢查變量值:
```shell
$ A=B
$ echo $A
B
$ echo $?
0
```
> **Note:**
> 關于變量的概念,我們留到以下的兩章跟大家說明。
好了,更多的關于`command line`的格式, 以及`echo`命令的選項,
請您自行多加練習、運用了...