购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3.9 Bash中的其他特殊字符

在Bash中还有很多其他的特殊字符,在这一小节中集中进行说明,如表2-8所示。

表2-8 Bash中的其他特殊字符

续表

下面举几个例子来解释一下比较常用和容易搞混的符号。

1.单引号和双引号

单引号和双引号用于当变量值出现空格时。比如,name=shen chao这样执行就会出现问题,必须用引号括起来,如name="shen chao"。不过,引号有单引号和双引号之分,二者的主要区别在于,用单引号括起来的字符都是普通字符,就算特殊字符也不再拥有特殊含义;而在用双引号括起来的字符中,“$”“\”和反引号是拥有特殊含义的,“$”代表调用变量的值,反引号代表调用命令。还是来看例子吧。

所以,如果需要在双引号中间输出“$”和反引号,则要在这两个字符前加入转义符“\”。

2.反引号

如果需要调用命令的输出,或者把命令的输出赋予变量,则命令必须使用反引号包含,这条命令才会执行。反引号的作用和$(命令)的作用是一样的,但是反引号非常容易和单引号搞混,所以推荐使用$(命令)的方式调用命令的输出。命令如下:

还是这句话,不管是从容易混淆的角度,还是从POSIX规范的角度来说,尽量使用$(命令)的方式来调用命令的输出,而不要使用反引号。

强调一下:只有需要调用命令的输出,或者需要把命令的输出赋予变量,才需要把命令用$()括起来。如果只需要在Shell中执行系统命令,则直接执行即可,因为Shell的特点就是可以直接执行Linux系统命令。

3.小括号、中括号和大括号

中括号主要用于变量的测试,而大括号也可以用于变量的变形和替换,这两种用法在2.4节中再详细介绍。在这里主要探讨在执行一串命令时小括号和大括号的作用。

在介绍小括号和大括号的区别之前,先解释两个概念:父Shell和子Shell。在Bash中是可以调用新的Bash的,比如:

这时,可以通过pstree命令查看一下进程数,命令如下:

可以看到,命令都是通过ssh远程服务连接的,在ssh中生成了第一个Bash,这个Bash就是父Shell。因为刚刚执行了bash命令,所以在第一个Bash中生成了第二个Bash,这个Bash就是子Shell,我们是在子Shell中运行pstree命令的。

关于父Shell和子Shell,可以想象成在Windows系统中开启了一个“cmd”字符操作终端,那么Windows系统本身就是父Shell,而“cmd”字符操作终端则是子Shell;也可以理解为在一个操作界面中又开启了一个子操作界面。

知道了父Shell和子Shell,我们接着解释小括号和大括号的区别。如果用于一串命令的执行,那么小括号和大括号的主要区别在于:

● ()在执行一串命令时,需要重新开启一个子Shell来执行。

● {}在执行一串命令时,是在当前Shell中执行的。

● ()里的最后一条命令后面可以不用分号。

● {}里的最后一条命令后面要用分号。

● {}里的第一条命令和左括号之间必须有一个空格。

● ()里的各条命令和括号之间不必有空格。

在执行一串命令时,小括号和大括号的共同点如下:

● ()和{}都是把一串命令放在括号里面的,并且命令之间用“;”隔开。

● ()和{}里面的某条命令的重定向只影响该命令,但括号外的重定向则会影响到括号里的所有命令。

还是举几个例子来看看吧,因为这样写实在太抽象了。

其实,在执行一串命令时,如果使用的是小括号,则这串命令所做的修改只在子Shell中生效,一旦命令执行结束,回到父Shell中,修改就会失效;而如果使用的是大括号,则这串命令直接在父Shell中执行,当命令执行结束后,修改依然会生效。 qIF2rrtsR77DA+CgwizxtUGHCcmNQdzVER02ymAJzotzkfCBEgtY8WMKg7llwwVI

点击中间区域
呼出菜单
上一章
目录
下一章
×