The read Command
read variable,执行此命令时,shell 从标准输入读取一行,并将第一个单词分配给变量中列出的第一个变量,将第二个单词分配给第二个变量,依此类推。如果该行上的单词多于列出的变量,则多余的单词将分配给最后一个变量。
read x y 从标准输入读入一行,把第一个单词保存到 x 中,其余的保存到 y 中,而 read text 则是把整行保存到 text 变量中。
A program to Copy Files
1 | if [ "$#" -ne 2 ]; then |
Special echo Escape Characters
echo 会自动添加换行,可以使用 \c 来转义,\c 是由 echo 来处理的,而不是 shell,所以必须加引号,否则会被 shell 处理。
有些 shell 不能识别,书中说可以使用 /bin/echo,但是没起作用。
其他转义字符:
| character | prints |
|---|---|
\b |
Backspace |
\c |
The line without terminating newline |
\f |
Formfeed |
\n |
Newline |
\r |
Carriage return |
\t |
Tab |
\\ |
Backslash chharacter |
\0nnn |
ASCII 值为 nnn 的字符,其中 nnn 是一位到三位八进制数 |
An Improved Version of mycp
1 | if [ "$#" -ne 2 ]; then |
A Final Version of mycp
1 | numargs=$# |
The $$ Variable and Temporary Files
$$ 当前进程 ID,为了避免文件被破坏,可以在临时文件名上加上进程 ID。
TMPFILE1=$(mktemp /tmp/im1.XXXXXX) 可以使用 mktemp。
The Exit Status from read
除非遇到文件结束条件,否则 read 返回零退出状态。如果数据来自终端,则意味着用户按下了 Ctrl+d。如果数据来自文件,则意味着没有更多数据可从文件中读取。
1 | addi |
1 | addi < data > sums |
为每个文件增加行号。
1 | number 类似 nl 命令 |
1 | number phonebook |
number 程序并不能很好的处理开头有很多空白字符和结尾有反斜线的行,可以使用 read -r line 处理结尾是反斜线的行,后面会介绍怎么处理开头是空白字符的行。
The printf Command
1 | printf "format" arg1 arg2 ... |