echo 是一个 shell 内建命令,可以完成非常简单的任务。它将它的文本参数打印到标准输出中。
这个命令的作用相当简单明了。传递到 echo 命令的任一个参数都会在(屏幕上)显示出来。
为什么 echo 不打印 “*” 呢?如果你回忆起我们所学过的关于通配符的内容,这个 “*” 字符意味着匹配文件名中的任意字符,但在原先的讨论中我们并不知道 shell 是怎样实现这个功能的。简单的答案就是 shell 在 echo 命令被执行前把 “*” 展开成了另外的东西(在这里,就是在当前工作目录下的文件名字)。当回车键被按下时,shell 在命令被执行前在命令行上自动展开任何符合条件的字符,所以 echo 命令的实际参数并不是 “*”,而是它展开后的结果。知道了这个以后,我们就能明白 echo 的行为符合预期。
波浪线展开:
算术表达式展开:
算术表达式展开使用这种格式:
算术表达式只支持整数(全部是数字,不带小数点),但是能执行很多不同的操作。
花括号展开:
我们要创建一系列以数值 “年-月” 形式命名的目录。
参数展开:
查看有效的变量列表:
命令替换:
命令替换允许我们把一个命令的输出作为一个展开模式来使用:
我们把 which cp 的执行结果作为一个参数传递给 ls 命令,因此可以在不知道 cp 命令完整路径名的情况下得到它的文件属性列表。
管道线的输出结果成为 file 命令的参数列表。
引用
shell 利用单词分割删除掉 echo 命令的参数列表中多余的空格。
双引号:
如果你把文本放在双引号中,shell 使用的特殊字符,都失去它们的特殊含义,被当作普通字符来看待。有几个例外:$,\ (反斜杠),和 ‘(倒引号)。这意味着单词分割、路径名展开、波浪线展开和花括号展开都将失效,然而参数展开、算术展开和命令替换仍然执行。使用双引号,我们可以处理包含空格的文件名。
在双引号中,参数展开、算术表达式展开和命令替换仍然有效
单引号
转义字符
在字符之前加上一个反斜杠,在这里叫做转义字符。