每當輸入一個命令按下enter鍵后,bash在執(zhí)行命令之前會對輸入的字符完成幾個步驟處理。
如echo是shell的一個內(nèi)部命令,功能是打印出文本參數(shù),傳遞到echo命令的每個參數(shù)都會被顯示出來。
6016@go:~$ echo i am a girl
i am a girl
但是echo不會打印,原因為匹配文件中的任意字符,shell把*展開成當前的工作目錄。
6016@go:~$ echo *
1428406016石蕾report003.pdf bin foo.txt ls-output.txt scripts work xx
眾所周知,以圓點字符開頭的文件名是隱藏文件,路徑名展開也遵守這種原則,
6016@go:~$ echo *
1428406016石蕾report003.pdf bin foo.txt ls-output.txt scripts work xx
6016@go:~$ echo .*
. .. .bash_history .bash_logout .bashrc .cache .dbus .profile .ssh .ttt.swp .vim .viminfo .Xauthority
要是展開模式以一個圓點開頭,就能夠在展開模式中包含隱藏文件,而且隱藏文件可能會出現(xiàn)在第一位置,如上面的命令行,而光是*就不會顯示出隱含文件。
回想CD命令,~有特殊的意義,它用在一個單詞的開頭時,就會展開成指定用戶的家目錄名,如果沒有指定用戶名,則是當前用戶的家目錄。
6016@go:~$ echo ~
/home/EE/6016
6016@go:~$ echo ~foo
~foo
算術表達式由數(shù)值和算術操作符組成,只支持整數(shù)(全部是數(shù)字,不帶小數(shù)點),但是能執(zhí)行很多不同的操作。(+ 加 - 減 * 乘 / 除 % 取余 ** 取冪) 在算術表達式中空格并不重要,并且表達式可以嵌套。
花括號的展開可以從一個包含花括號的模式中創(chuàng)建多個文本字符串,包含一個開頭部分叫做報頭,一個結尾部分叫做附言?;ɡㄌ柋磉_式本身可能包含一個由逗號分開的字符串列表,或者一系列整數(shù),或者單個的字符串,這種模式不能嵌入空白字符。
如果你把文本放在雙引號中,shell 使用的特殊字符,除了$,\ ,和‘之外,則失去它們的特殊含義,被當作普通字符來看待。這意味著單詞分割,路徑名展開,波浪線展開,和花括號展開都被禁止,然而參數(shù)展開,算術展開,和命令替換仍然執(zhí)行。使用雙引號,我們可以處理包含空格的文件名。
因此,在雙引號中,參數(shù)展開,算術表達式展開,和命令替換仍然有效。
隨著繼續(xù)學習shell,我們會發(fā)現(xiàn)使用展開和引用的頻率逐漸多起來,所以能夠很好的理
解他們的工作方式很有意義。事實上,他們是學習shell 的最重要的主題。