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