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

中執行,命令結束后,修改依然生效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM