扩展和引用
廖家龙 用心听,不照做

扩展:每次输入命令行按下Enter键时,bash都会在执行命令之前对文本进行多重处理,产生这个结果的处理过程称为扩展,有了扩展功能,在输入内容后,这些内容将在shell对其执行之前被扩展成其他内容

echo:shell内置命令,把文本参数内容打印到标准输出

路径名扩展:通过使用通配符来实现扩展的机制

波浪线扩展:如果把~用在一个单词的开头,那么它将被扩展为指定用户的主目录名,如果没有指定用户命名,则扩展为当前用户的主目录

算术扩展:shell支持通过扩展来运行算术表达式,这允许我们把shell提示符当作计算器来使用:

花括号扩展:可以按照花括号里面的模式创建多种文本字符串

参数扩展:
命名为USER的变量包含你的用户名,为了触发参数扩展,并显示出USER的内容:

命令替换:可以把一个命令的输出作为一个扩展模式使用


引用:

在第一个例子中,shell会对echo命令的参数列表进行单词分割,去除多余的空白;在第二个例子中,因为$1是一个未定义的变量,所以参数扩展将把$1的值替换为空字符串

shell提供了一种称为引用(quoting)的机制,用来有选择性的避免不想要的扩展

双引号:


在第一个例子中,没有加上引号的命令替换将导致命令行被识别为命令后面跟着38个参数;而在第二个例子中加了双引号,使得命令行被识别为命令后面只跟着一个参数,这个参数包含着嵌入空格和换行字符

单引号:

转义字符:

有时候我们只是想要引用单个字符,这种情况可以通过在该字符前加上反斜杠来实现,这里的反斜杠称为转义字符,转义字符经常在双引号中用来有选择性的阻止扩展:

转义字符也常用来消除文件名中某个字符的特殊含义,比如文件名中可以使用在shell中通常具有特殊含义的字符,这些字符包括“$”、“!”、“&”、空格等

如果想要显示反斜杠字符,可以通过使用两个反斜杠“\”来实现,需要注意的是,单引号中的反斜杠将失去它的特殊含义,而只被当成一个普通字符