现在您拥有了一个提示,让我们看看该如何处理它。shell 的主要功能是对您的命令进行解释,这样您就可以与 Linux 系统进行交互。在 Linux(以及 UNIX?)系统中,命令具有一个命令名称,以及选项 和参数。某些命令既没有选项,也没有参数,而另一些命令可能只具有其中之一。
如果一行代码中包含一个 # 字符,那么该行中的所有其他字符都可以被忽略。因此 # 字符可能表示一个注释以及一个根提示,这可以从上下文中看出来。
echo 命令将它的参数输出(或回传)到终端,如清单 3 所示。
清单 3. 回传示例
[ian@echidna ~]$ echo Word Word [ian@echidna ~]$ echo A phrase A phrase [ian@echidna ~]$ echo Where are my spaces? Where are my spaces? [ian@echidna ~]$ echo "Here are my spaces." # plus comment Here are my spaces.
在清单 3 的第三个示例中,所有额外的空间都被压缩到输出的单个空间中。为了避免这种情况,需要使用双引号(")或单引号(')将字符串括起。Bash 使用空格,比如空白、制表符和换行符,来将输入行分离到标记(token)中,后者随后被传递给命令。使用引号引用字符串将保留多余的空格并将完整的字符串作为一个单一标记。在上面的示例中,命令名称之后的每一个标记都是一个参数,因此我们具有的参数分别为 1、2、4 和 1。
echo 命令包含两个选项。echo 通常会在输出的末尾加一个拖尾换行符。使用 -n 选项可以禁用这个行为。使用 -e 选项可以使某些反斜杠转义字符具有特殊的含义。其中一些如表 1 所示。
表 1. Echo 和转义字符
转义
序列 作用
\a 警告 (bell)
\b 退格
\c 禁用拖尾换行(与 -n 选项作用相同)
\f 换页(在视频显示中清空屏幕)
\n 换行
\r 回车
\t 水平制表符
在 bash 中使用反斜杠存在一个小问题。当未使用引号引用反斜杠字符(时),将作为一个转义来表示 bash 本身,用于保留以下字符的字面含义。这对于特殊的 shell 元字符是非常必要的,我们将在稍后讨论。这条规则有一个例外:反斜杠后跟一个换行符将致使 bash 合并这两个字符并将字符序列作为一个续行请求处理。这样做可以方便地将比较长的行断开,特别是在 shell 脚本中。
要使用 echo 命令或众多其他使用类似转义控制字符的命令来正确地处理上述字符序列,必须使用引号将转义序列括起,或作为引用字符串的一部分,除非您使用了另一个反斜杠,以使 shell 为命令保留一个反斜杠。清单 4 展示了反斜杠的各种使用示例。
清单 4. 更多 echo 示例
[ian@echidna ~]$ echo -n No new line No new line[ian@echidna ~]$ echo -e "No new line\c" No new line[ian@echidna ~]$ echo "A line with a typed > return" A line with a typed return [ian@echidna ~]$ echo -e "A line with an escaped\nreturn" A line with an escaped return [ian@echidna ~]$ echo "A line with an escaped\nreturn but no -e option" A line with an escaped\nreturn but no -e option [ian@echidna ~]$ echo -e Doubly escaped\\n\\tmetacharacters Doubly escaped metacharacters [ian@echidna ~]$ echo Backslash \ > followed by newline \ > serves as line continuation. Backslash followed by newline serves as line continuation.
注意,bash 在您输入包含不匹配引号的行时显示了一个特殊的 提示 (>)。您的输入字符串继续输入到下一行并包含一个换行符。