1、單引號和雙引號linux
首先,單引號和雙引號,都是爲了解決中間有空格的問題。shell
由於空格在linux中時做爲一個很典型的分隔符,好比string1=this is astring,這樣執行就會報錯。爲了不這個問題,所以就產生了單引號和雙引號。他們的區別在於,單引號將剝奪其中的全部字符的特殊含義,而雙引號中的'$'(參數替換)和'`'(命令替換)是例外。因此,二者基本上沒有什麼區別,除非在內容中遇到了參數替換符$和命令替換符`。函數
因此下面的結果:
num=3
echo ‘$num’
$num
echo 「$num」
3
因此,若是須要在雙引號」」裏面使用這兩種符號,須要用反斜槓轉義。this
2、反引號``string
這個東西的用法,我百度了一下,和$()是同樣的。在執行一條命令時,會先將其中的 ``,或者是$() 中的語句看成命令執行一遍,再將結果加入到原命令中從新執行,例如:
echo `ls`
會先執行 ls 獲得xx.sh等,再替換原命令爲:
echo xx.sh
最後執行結果爲
xx.sh
那麼,平時咱們遇到的把一堆命令的執行結果輸出到一個變量中,須要用這個命令替換符括起來,也就能夠理解了。
這裏又涉及到了一個問題,雖然很多系統工程師在使用替換功能時,喜歡使用反引號將命令括起來。可是根據POSIX規範,要求系統工程師採用的是$(命令)的形式。因此,咱們最好仍是遵循這個規範,少用``,多用$()ast
3、小括號,中括號,和大括號的區別test
那麼,下面又涉及到了一個問題,就是小括號,中括號,和大括號的區別。
先說說小括號和大括號的區別。這二者,其實是「命令羣組」的概念,也就是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語句裏面,等等。
這裏引出來[..]和[[…]]的區別:(摘自網上,實測證明):使用[[... ]]條件判斷結構, 而不是[ ... ], 可以防止腳本中的許多邏輯錯誤.好比,&&, ||, <,和> 操做符可以正常存在於[[ ]]條件判斷結構中, 可是若是出如今[ ]結構中的話,會報錯。變量