单引号和双引号
单引号和双引号用于变量值出现空格时将字符用引号括起来。 二者的主要区别在于,
被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义;
被双引号括起来的字符中,"$"、"\"和反引号是拥有特殊含义的,"$"代表引用变量的值,而反引号代表引用命令。
使用单引号
如果输出时使用单引号,则$PATH原封不动地输出
[root@localhost ~]# echo '$PATH'
使用双引号
如果输出时使用双引号,则会输出变量PATH的值
[root@localhost ~]# echo "$PATH"
反引号
如果需要调用命令的输出,或把命令的输出赋予变量,则命令必须使用反引号包含,这条命令才会执行,反引号的作用和 $(命令) 是一样的。命令如下:
[root@localhost -]# echo `ls` anaconda-ks.cfg install.log install.log.syslog sh test testfile
用反引号包含命令,这条命令才会执行。否则只是输出字符 ls。
小括号和大括号
在 Bash 中,是可以调用新的 Bash 的,比如:
[root@localhost ~]# bash [root@localhost ~]#
这时,可以通过 pstree 命令査看一下进程数,命令如下:
[root@localhost ~]# pstree init──┬──abrt-dump-oops …省略部分输出 ├─sshd──┬──sshd───bash───bash───pstree …省略部分输出
可以看到我们的命令都是通过 ssh 远程服务链接的,在 ssh 中生成了第一个 Bash,就是父 Shell。因为我们刚刚执行了 Bash 命令,所以在第一个 Bash 中生成了第二个 Bash,这个 Bash 就是子 Shell,我们是在子 Shell 中运行命令 pstree 的。
小括号和大括号主要区别在于:
-
() 执行一串命令时,需要重新开启一个子 Shell 来执行。
-
{} 执行一串命令时,在当前 Shell 中执行。
-
() 和 {} 都是把一串命令放田括号里面,并且命令之间用";"隔开。
-
() 最后一条命令可以不用分号。
-
{} 最后一条命令要用分号。
-
{} 的第一条命令和左括号之间必须有一个空格。
-
() 和 {} 中括号里面的某条命令的重定向只影响该命令,但括号外的重定向则会影响到括号里的所有命令。
下面举几个例子。
#在父 Shell 中定义 name 的值是 li [root@localhost ~]# name=li #给name变量重新赋值,但是这个值只在子Shell中 [root@localhost ~]# (name=zhou;echo $name) zhou #父Shell中name的值还是li,而不是zhou [root@localhost ~]# echo $name li #用大括号来进行一串命令的执行时,name变量的修改是直接在父Shell中进行的 [root@localhost ~]#{ name=wei;echo $name;} wei #name变量的值已经被修改了 [root@localhost ~]# echo $name wei
其实在执行一串命令时,如果使用的是小括号,则这串命令所做的修改只在子 Shell 中生效,一旦命令执行结束,回到父 Shell 中,这个修改就会丟失;而如果使用的是大括号,则此串命令直接在父 Shell 中执行,命令执行结束后,修改依然会生效。