1. 程式人生 > >shell符號解釋

shell符號解釋

#符號詳解
() 在子shell中執行
    (a=1);echo $a,結果是空,因為a=1不是在當前shell中執行的(a=1);(echo $a)也是空的
    小技巧:(cd $path, do something) 可以讓不切換當前目錄而在其它目錄乾點別的事兒~
    () 還有個功能是陣列的賦值:比如a=(1 3 5),那麼${a[0]}=1;${a[1]}=3;${a[2]}=5,需要注意的是,下標是從0開始的。

(()) 表示式計算
    a=1;((a++));echo $a,這時a就是2了。

<() 和 >() 程序代入,可以把命令的執行結果當成檔案一樣讀入
    比如comm前一般需要sort,那就可以這樣comm <(sort 1.lst) <(sort 2.lst)
    或者是paste <(cut -t2 file1) <(cut -t1 file1),和管道差不多,但是支援多個輸入。

$() $(cmd) 執行cmd的結果
    比如cmd是echo ls,那麼就是執行ls,比如file $(which bash),which bash的結果是/bin/bash,
    所以file $(which bash)等於file /bin/bash。如果你$(ls),而且你的當前目錄下只有a b兩個檔案,
    那麼就是執行a b,然後系統會提示,命令沒找到。$() 基本和 `` 等價
。 $(()) 表示式擴充套件, 和(())很相似,但是這個是有點不同,$(())不能直接$((b++)),例如:b=1;echo $((++b)) 這時b等於2,顯示的也是2,b=1; echo $((b++))這時b等於2,顯示的是1. [] 和 [[]],[] 就是 test,[]和[[]]都是條件表示式,不過[[]]有比[]高的容錯性, [ -a|-o] [[ && | || ]] 如果a為空,那麼[ $a -eq 0 ]會報錯,但是[[ $a -eq 0 ]]不會,所以一般都會使用[[]]或者是 [ "$a" -eq 0 ],[[]]支援的功能也比 [] 多,比如[[ aaa =~ a{3} ]],[] 還有一種用途, 如果你的當前目錄下有a1-a9九個檔案,你可以用a[1-9]來替代這九個檔案。 有點需要注意,你不能用a[1-20]來代替a1- a20,必須要a[1-9] a1[0-9] a20。 但是需要注意的是 [[]] 數字進位制轉換的坑~ $[] 是 $(()) 的過去形式,現在已經不建議使用。 {n..m} {1..30} 就是1-30,或者是/{,s}bin/表示/bin/和/sbin/,ab{c,d,e}表示abc、abd、abe, 小技巧:檔案備份:cp a.sh{,.bak}
{ cmd1; cmd2; } 的作用是定義一個命令組,一般用在單行的條件表示式中: [[ 1 -eq 2 ]] && echo True || { echo False; echo "Program will exit!"; } 其實 shell 函式的語法也是它的變體: a(){ i=$1; echo $((i++)); echo $((++i)); } && a 1 ${} 變數的Parameter Expansion, 用法很多,最基本的 ${var}1,防止變數擴充套件衝突,具體可以檢視man bash