() : 創建成組的命令
1) 一組由圓括號括起來的命令是新開一個子shell來執行的
因為是在子shell裡執行,在圓括號裡的變量不能被腳本的其他部分訪問。因為父進程(即腳本進程)不能存取子進程(即子shell)創建的變量。
(a=hello; echo $a)2) 數組初始化.
Array=(element1 element2 element3) (( )) : 擴展並計算(( ))裡的整數表達式, 不能用來做浮點計算. {} : 創建命令塊
1) 這個結構也是一組命令代碼塊,事實上,它是匿名的函數。然而與一個函數所不同的,在代碼塊裡的變量仍然能被腳本後面的代碼訪問。
2) 不像一個用圓括號括起來的命令組,一個用花括號括起的代碼塊不會以一個子shell運行。
“”: 部分引用——可以解釋引號中的變量
‘’: 完全引用——引號內所有的內容都是常量
: :空操作——什麼都不做。一般用在腳本中。
1) 在必須要有兩元操作的地方作為一個分隔符
: ${username=`whoami`}
# ${username=`whoami`} 如果沒有開頭的:,將會出錯,除非"username"是一個外部命令或是內建命令.
2) 在參數替換中為字符串變量賦值
: ${HOSTNAME?} ${USER?} ${MAIL?}# 如果列出的一個或多個基本的環境變量沒有設置,將打印出錯信息。 ? : 在參數替換表達式裡,測試一個變量是否被設置了值.
[] : 測試在[ ]中的表達式.
數組元素——在數組的上下文中,方括號表示數組的每個元素的數字編號.
[[]] : 測試在[[]]中的表達式.
1) 在[[和]]之間的所有的字符都不會被文件擴展或是標記分割,但是會有參數引用和命令替換。
2) 用[[ ... ]]測試結構比用[ ... ]更能防止腳本裡的許多邏輯錯誤。比如說,&&,||,<和>操作符能在一個[[]]測試裡通過,但在[]結構會發生錯誤。
<< :在here document中使用的重定向.
<<<:在here string中使用的重定向.
-:
1) 用於stdin或stdout重定向的源或目的
(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)