《linux命令行大全》读书笔记 第7章 透过shell看世界

                                           第7章 通过shell看世界

本章主要介绍的是shell中的扩展和引用,是shell中的一个重要主题。了解扩展和引用的工作方式对理解shell内部工作原理和使用shell有很大的帮助。

主要涉及的命令:echo:功能是显示一行文本。


一:扩展

1:路径名扩展

通过使用通配符来实现扩展的机制称为路径名扩展。在shell中输入一个命令后,按下Enter时,bash都会在执行命令之前对文本进行多重处理,类似于预处理,如将通配符扩展成其对应的文本。举个例子,打开终端输出 echo *。

如下:


可以发现输出的并不是*而是当前目录下的所有文件和目录名,发生了什么,回想一下,在前面我们介绍过*意味着“匹配文件名中的任意字符”,在这里,shell会将*扩展成相应的文本,就是我们看到的内容。

使用前面介绍的通配符,将它们结合起来,可以得到它们的扩展,下面举几个例子:


2:波浪线扩展

~具有特殊的意义,如果将它单独使用,它表示当前用户的主目录,如果将它用在指定用户名的开头,则会扩展成指定用户的主目录。


3:算数扩展

shell支持通过扩展来实现算数表达式,其形式为:

$((expression))

其中expression是指包含数值和算数操作符的算数表达式,注意这里算数只支持整数,不包括小数。

下面列出一些支持的运算符:

+,-,*,/,%,**除了最后一个,其他的应该都很熟悉,最后一个运算符表示取幂。2**3表示2的三次方。

可以用一对括号来组合多个子表达式。

有关算数扩展的更加详细介绍可以参照后面章节的介绍(具体是34章。。。早这呢。。。。)


4:花括号扩展

花括号扩展可能是最奇怪的组合方式了,先看一个实例:

可以看到,花括号扩展可以包含一个称为前导的字符作为开头部分和一个称为符言的结尾部分。话括号里面可以是由逗号隔开的内容,如上面的例子,

或者是一系列整数或者单个内容。如下面的例子:



花括号一般的应用是创建一系列的文件夹或者文件,这些文件名需要按照一定的规则排列,比如先按年份,再按日期等等,这时候就可以使用嵌套的花括号扩展。如下面的例子:



5:参数扩展

这里仅仅简要地介绍参数扩展,以后还会更加深入地介绍它。事实上,参数扩展在shell脚本中比直接用在命令行中更为有用。

在这里,参数更类似于高级语言中的变量,比如,我们将当前用户的主目录命名为HOME,将当前用户的名字命名为USER,我们可以在终端中输出这些参数的值:


对于参数扩展中,如果输错参数名,仍然会进行扩展,这时候会扩展成一个空字符。


6:命令替换

命令替换是将一个命令的输出作为一个扩展模式使用,具体格式为

&(commad)

它将命令的输出当作是一个扩展模式,可以应用到前面提到的几种命令模式中。


二:引用

上面提到,shell有多种方式可以实现扩展,现在来学习如何控制扩展。

这里有个例子:


我们发现 $1没有被输出,shell将$1到成石扩展,这时候没有名为1的参数,所以shell将1扩展成一个空字符。

这时候显然我们并没想到要用到扩展,所以需要有一种机制来避免不必要的扩展。

1:双引号

先来介绍第一种引用类型,双引号,将文本放在双引号中,则shell将会把包含在双引号之间的内容看成是一个整体,而不会被空格,制表符和换行符分割。举个例子,如果一个文件的名字为 just a test。我们想要访问他的时候,如果直接输入 just a test,会出现错误:


当使用双引号时,将会得到正确结果:


当不使用双引号时,shell会将他们认为是三个参数,加了之后会把双引号中的内容当成一个参数。

注意:双引号中,参数扩展,算数扩展和命令替换依然生效。所以就算加了双引号也不能解决我们一开始的问题:


如果想要抑制所有的扩展,要是用单引号。

2:单引号

使用单引号可以取消所有的扩展:



3:转义字符

有时候我们只是想要使用单个字符,而不用抑制所有的扩展,这个时候可以使用转义字符,通过在这个字符前加上反斜杠实现。

这里的反斜杠称为转义字符。转义字符也用来消除文件名中的某个特殊字符,常用的转义字符如下所示:


\a               响铃

\b               退格

\n               换行

\r                回车

\t                制表符

\$               字符$

\\                字符\

......


随着我们深入学习shell,就会发现扩展和引用的使用频率逐渐多起来,所以很有必要很好地了解它们的工作方式。如果不能正确地理解扩展,那么shell将会是个神秘和让人困惑的资源,它的潜在能力也就被浪费了。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页