扩展:每次输入命令行按下Enter键时,bash都会在执行命令之前对文本进行多重处理,产生这个结果的处理过程称为扩展,有了扩展功能,在输入内容后,这些内容将在shell对其执行之前被扩展成其他内容
echo:shell内置命令,把文本参数内容打印到标准输出
路径名扩展:通过使用通配符来实现扩展的机制
波浪线扩展:如果把~用在一个单词的开头,那么它将被扩展为指定用户的主目录名,如果没有指定用户命名,则扩展为当前用户的主目录
算术扩展:shell支持通过扩展来运行算术表达式,这允许我们把shell提示符当作计算器来使用:
花括号扩展:可以按照花括号里面的模式创建多种文本字符串
参数扩展:
命名为USER的变量包含你的用户名,为了触发参数扩展,并显示出USER的内容:
命令替换:可以把一个命令的输出作为一个扩展模式使用
引用:
在第一个例子中,shell会对echo命令的参数列表进行单词分割,去除多余的空白;在第二个例子中,因为$1是一个未定义的变量,所以参数扩展将把$1的值替换为空字符串
shell提供了一种称为引用(quoting)的机制,用来有选择性的避免不想要的扩展
双引号:
在第一个例子中,没有加上引号的命令替换将导致命令行被识别为命令后面跟着38个参数;而在第二个例子中加了双引号,使得命令行被识别为命令后面只跟着一个参数,这个参数包含着嵌入空格和换行字符
单引号:
转义字符:
有时候我们只是想要引用单个字符,这种情况可以通过在该字符前加上反斜杠来实现,这里的反斜杠称为转义字符,转义字符经常在双引号中用来有选择性的阻止扩展:
转义字符也常用来消除文件名中某个字符的特殊含义,比如文件名中可以使用在shell中通常具有特殊含义的字符,这些字符包括“$”、“!”、“&”、空格等
如果想要显示反斜杠字符,可以通过使用两个反斜杠“\”来实现,需要注意的是,单引号中的反斜杠将失去它的特殊含义,而只被当成一个普通字符