標籤:blog http 使用 os 問題 html linux amp
一、單引號和雙引號
首先, 單引號和雙引號,都是為瞭解決中間有空格的問題。
因為空白格在linux中時作為一個很典型的分隔字元,比如 string1=this is a string,這樣執行就會報錯。為了避免這個問題,因此就產生了單引號和雙引號。他們的區別在於,單引號將剝奪其中的所有字元的特殊含義,而雙引號中的 ‘$‘(參數替換)和‘`‘(命令替換)是例外。所以,兩者基本上沒有什麼區別,除非在內容中遇到了參數替換符$和命令替換符`。
所以下面的結果:
num=3
echo ‘$num’
$num
echo “$num”
3
所以,如果需要在雙引號””裡面使用這兩種符號,需要用反斜線轉義。
二、反引號``
這個東西的用法,我百度了一下,和$()是一樣的。在執行一條命令時,會先將其中的 `` ,或者是$() 中的語句當作命令執行一遍,再將結果加入到原命令中重新執行,例如:
echo `ls`
會先執行 ls 得到 xx.sh等,再替換原命令為:
echo xx.sh
最後執行結果為
xx.sh
那麼,平時我們遇到的把一堆命令的執行結果輸出到一個變數中,需要用這個命令替換符括起來,也就可以理解了。
這裡又涉及到了一個問題,雖然不少系統工程師在使用替換功能時,喜歡使用反引號將命令括起來。但是根據POSIX規範,要求系統工程師採用的是$(命令)的形式。所以,我們最好還是遵循這個規範,少用``,多用$()
三、小括弧,中括弧,和大括弧的區別
那麼,下面又涉及到了一個問題,就是小括弧,中括弧,和大括弧的區別。
先說說小括弧和大括弧的區別。這兩者,實際上是“命令群組”的概念,也就是command group。
( ) 把 command group 放在subshell 去執行,也叫做 nested sub-shell。
{ } 則是在同一個 shell 內完成,也稱為 non-named command group。
所以說,如果在shell裡面執行“函數”,需要用到{},實際上也就是一個命令群組麼。
不過,根據實測,test=$(ls -a)可以執行,但是test=${ls –a}文法上面是有錯誤的。估計也和上面所說的原因有關。
另外,從網上摘錄的區別如下:
A,()只是對一串命令重新開一個子shell進行執行
B,{}對一串命令在當前shell執行
C,()和{}都是把一串的命令放在括弧裡面,並且命令之間用;號隔開
D,()最後一個命令可以不用分號
E,{}最後一個命令要用分號
F,{}的第一個命令和左括弧之間必須要有一個空格
G,()裡的各命令不必和括弧有空格
H,()和{}中括弧裡面的某個命令的重新導向隻影響該命令,但括弧外的重新導向則影響到括弧裡的所有命令
兩個括弧(()),是代表算數擴充,就是對其包括的東西進行標準的算數計算——注意,不能算浮點數,如果需要算浮點數,需要用bc做。
至於中括弧[ ],感覺作用就是用來比較的。比如放在if語句裡面,while語句裡面,等等。
這裡引出來[..]和[[…]]的區別:(摘自網上,實測證實):使用[[ ... ]]條件判斷結構, 而不是[ ... ], 能夠防止指令碼中的許多邏輯錯誤. 比如,&&, ||, <, 和> 操作符能夠正常存在於[[ ]]條件判斷結構中, 但是如果出現在[ ]結構中的話, 會報錯。
轉自 http://blog.sina.com.cn/s/blog_96b8a15401013g0v.html