bash中的特殊符号

''  单引号,在单引号中所有的特殊符号都没有了特殊的意义。

""  双引号,在双引号中特殊符号都没有特殊含义但是  $    `  和  \  例外,分别拥有

  调度变量  引用命令  和  转义符  的特殊含义

``  反引号,反引号括起来的内容是系统命令,在bash中会优先执行,和  $()  的作用一样,不过推荐使用$(),

  反引号容易看错

$()  和反引号的作用一样,引用系统命令

()  用于一串命令执行时,()中的命令会在子shell中执行

{}  用于一串命令执行时,{}中的命令会在当前shell中执行,也可以用于变量变形与替换

[]  用于变量测试

#  在shell脚本中,以#开头的行代表注释

$  用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值

\  转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出$符号,不当做变量引用

单引号和双引号

单引号和双引号用于变量出现空格时,比如,name=xiao ming这样执行就会出现问题,而必须用引号括起来

比如name="xiao ming"。不过引号有单引号和双引号之分,二者的主要区别在于,被单引号括起来的字符都是普通字符。

就算特殊字符也不再有特殊含义,而被双引号括起来的字符中,"$"和"\"和反引号是拥有特殊含义的,"$"代表引用变量的值,而反引号

代表引用命令。

如果需要在双引号中输出$和反引号需要在符号前加上转义符\

例子就略啦

反引号

如果需要调用命令的输出,或把命令的输出赋予变量,则命令必须使用反引号包含,这条命令才会执行。反引号的作用和$(命令)是一样的

但是反引号容易和单引号搞混。建议使用$(命令)

小括号和大括号

父shell子shell

[root@andy ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─agetty
├─atd
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon
├─httpd───5*[httpd]
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─vmtoolsd───{vmtoolsd}
├─vsftpd
├─xinetd
├─zabbix_agentd───5*[zabbix_agentd]
└─zabbix_server
[root@andy ~]#

可以看到pstree在父shell中执行的

[root@andy ~]# bash
[root@andy ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─agetty
├─atd
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon
├─httpd───5*[httpd]
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rpcbind
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─vmtoolsd───{vmtoolsd}
├─vsftpd
├─xinetd
├─zabbix_agentd───5*[zabbix_agentd]
└─zabbix_server
[root@andy ~]#

执行一次bash后则pstree在子shell中执行的

关于父shell和子shell,可以想象成在Windows中开启了一个cmd字符操作终端,Windows本身就是父shell,cmd就是子shell

如果用于执行一串命令,小括号和大括号的区别

()执行一串命令时,需要重新开启一个子shell来执行

{}执行一串命令时,在当前shell中执行

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

()最后一条命令可以不用分号

{}最后一条命令也要用分号

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

()里的各命令不必和括号有空格

在执行一串命令时,如果使用的小括号,则这串命令所做的修改只在子shell中生效

一旦命令结束,回到父shell中,这个修改就会丢失,而如果,使用的时大括号,则此串命令直接在父shell

中执行,命令结束后,修改依然生效

posted @ 2020-01-14 21:21  Y_Andy  阅读(1034)  评论(0编辑  收藏  举报