Bash中的特殊字符,鍵盤上能敲出來的特殊字符都有其特殊意義,強調一點:元字符是被shell解釋的。
1. '',取命令的執行結果
[root@MiWiFi-R3-srv ~]# ls
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz
[root@MiWiFi-R3-srv ~]# res=`ls` #取命令的運行結果,賦值給變量res
[root@MiWiFi-R3-srv ~]# echo $res #查看變量res的值
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz
2. $(),同上,但它彌補了''的嵌套缺陷
[root@MiWiFi-R3-srv ~]# res=`echo `ls`` #嵌套使用后無法達到預想的效果:取echo 一堆文件名的效果。
[root@MiWiFi-R3-srv ~]# echo $res
ls
[root@MiWiFi-R3-srv ~]# res=$(echo $(ls)) #替代方案
[root@MiWiFi-R3-srv ~]# echo $res
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz
3. ~, 家目錄
[root@MiWiFi-R3-srv tmp]# cd ~
[root@MiWiFi-R3-srv ~]# pwd
/root
4. !
a !,取非
[root@MiWiFi-R3-srv ~]# ls /dev/sda
sda sda1 sda2
[root@MiWiFi-R3-srv ~]# ls /dev/sda[0123]
/dev/sda1 /dev/sda2
[root@MiWiFi-R3-srv ~]# ls /dev/sda[!01]
/dev/sda2
b !,歷史命令調用
[root@MiWiFi-R3-srv ~]# !343
hostname
MiWiFi-R3-srv
c !,匹配最近一次歷史命令
[root@MiWiFi-R3-srv ~]# !ls
ls /dev/sda[!01]
/dev/sda2
d ! ,帶空格 將命令的返回值取反
[root@MiWiFi-R3-srv ~]# echo ok
ok
[root@MiWiFi-R3-srv ~]# echo $? #上一條命令執行的結果,0代表執行成功,非0代表執行失敗
0
[root@MiWiFi-R3-srv ~]# ! echo ok #將結果取反
ok
[root@MiWiFi-R3-srv ~]# echo $?
1
0-255之間,0則為真,非0位假
6. @,無特殊含義
7. # 注釋
8. $
a $,變量取值
b $() 同``
c ${},變量名的范圍
d $[],整數計算 echo $[2+3] - * / % 浮點數用 echo "scale=3; 10/3" | bc -l
[root@MiWiFi-R3-srv ~]# money=10
[root@MiWiFi-R3-srv ~]# echo $money
10
[root@MiWiFi-R3-srv ~]# echo 00000$money
0000010
[root@MiWiFi-R3-srv ~]# echo $money0000
[root@MiWiFi-R3-srv ~]# echo ${money}0000
100000
9. %
a 殺后台進程 jobs號
b 取模
10. ^,
a 取非,和!雷同
[root@MiWiFi-R3-srv ~]# ls /dev/sda[^01]
/dev/sda2
[root@MiWiFi-R3-srv ~]# ls /dev/sda[!01]
/dev/sda2
b 替換
[root@MiWiFi-R3-srv ~]# systemctl restart network
[root@MiWiFi-R3-srv ~]# ^network^sshd^
systemctl restart sshd
11. &
a 后台執行
b &&,邏輯與
12. *
a 匹配任意長度字符串
b 計算乘法
13. (),在子進程中執行
[root@MiWiFi-R3-srv ~]# x=1
[root@MiWiFi-R3-srv ~]# (x=666)
[root@MiWiFi-R3-srv ~]# echo $x
1
[root@MiWiFi-R3-srv ~]#
[root@MiWiFi-R3-srv ~]# (x=666;echo $x)
666
14. -
a 減號
b 區間
c cd -
15. _,無特殊含義
16. +,加號
17. =,賦值
18. |
a |,管道
b ||,邏輯或
19. \,轉義
[root@MiWiFi-R3-srv test]# echo \\
\
[root@MiWiFi-R3-srv test]# echo \'
'
[root@MiWiFi-R3-srv test]# echo "'"
'
20. {},命令列表 #括號內的開頭和結尾必須是空格
# { ls; cd /; }
21. [],字符通配,匹配括號內之一
22. :,
a 空命令
b 真值
[root@MiWiFi-R3-srv ~]# :
[root@MiWiFi-R3-srv ~]# echo $?
0
23. ;,可以接多個命令:ls;pwd;echo 123;無論對錯,會一直執行到最后一條命令
24. "",軟引, '',硬引
[root@MiWiFi-R3-srv test]# x=1
[root@MiWiFi-R3-srv test]# echo "$x" #雙引號的代表軟引用,引號內特殊字符有特殊意義,比如$,``等
1
[root@MiWiFi-R3-srv test]# echo '$x' #單引號代表硬引用,引號內所有字符都無特殊意義
$x
25. <,輸入重定向
26. >,輸出重定向
27. >>,追加
28. <<,here document ???
29. >&,合並2和1輸出
30. ,逗號,枚舉分隔符
31. .點,source ,當前目錄
32. /,目錄分隔符
33. ?,通配符,任一字符
34. 回車符,命令執行
35. *,通配符,任意字符
參考資料
1. http://www.cnblogs.com/linhaifeng/p/6592572.html#_label3
2. http://jingyan.baidu.com/article/3052f5a1f4486797f31f86e1.html