# 有意義的「#」符合
echo ${PATH#*:} # 參數替換,不是一個註釋
echo $(( 2#101011 )) # 進制轉換,能夠是任意進制,不是一個註釋shell
「.」 .字符匹配,這是做爲正則表達是的一部分,用來匹配任何的單個字符.
【例】bash$ cp /home/bozo/current_work/junk/* .數組
, 逗號連接了一系列的算術操做,雖然裏邊全部的內容都被運行了,但只有最後一項被返回.
【例】let "t2 = ((a = 9, 15 / 3))" # 設制變量 "a = 9" 和 "t2 = 15 / 3"bash
\ 轉義字符,如\X 等價於"X"或'X'.
/ 文件名路徑分隔符.或用來作除法操做.函數
: 空命令,等價於"NOP"(no op,一個什麼也不幹的命令).也能夠被認爲與shell 的內建命令(true)做用相同.
":"命令是一個 bash 的內建命令,它的返回值爲0,就是shell 返回的true.spa
[root@localhost TeShuzifu]# cat Sixunhuan.sh #!/bin/bash #描述: # 用":"寫死循環 #做者:孤舟點點 #版本:1.0 #建立時間:2017-11-12 13:09:30 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH while : do date "+%Y%m%d-%H%M%S" sleep 1 done [root@localhost TeShuzifu]#
[root@localhost TeShuzifu]# cat Ifzhanweifu.sh #!/bin/bash #描述: # 用if語句使用佔位符":"。 #做者:孤舟點點 #版本:1.0 #建立時間:2017-11-12 13:24:00 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH if [ : ] ; #表明true then : #什麼都不作,引出分支。 date sleep 1 fi [root@localhost TeShuzifu]#
也可能用來做爲註釋行,雖然咱們不推薦這麼作.使用#來註釋的話,將關閉剩餘行的錯誤檢查,因此能夠在註釋行中寫任何東西.然而,使用:的話將不會這樣.如:code
1 : This is a comment thar generates an error,(if [ $x -eq 3] ).blog
":"還用來在/etc/passwd 和$PATH 變量中用來作分隔符.進程
[root@localhost TeShuzifu]# echo $PATH /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@localhost TeShuzifu]#
$? 退出狀態變量.$?保存一個命令/一個函數或者腳本自己的退出狀態.element
$$ 進程ID 變量.這個$$變量保存運行腳本進程IDqt
() 命令組.如:
1 (a=hello;echo $a) 注意:在()中的命令列表,將做爲一個子shell 來運行. 在()中的變量,因爲是在子shell 中,因此對於腳本剩下的部分是不可用的. 如: 1 a=123 2 ( a=321; ) 3 4 echo "a = $a" # a = 123 5 # 在圓括號中a 變量,更像是一個局部變量.
用在數組初始化,如:
1 Array=(element1,element2,element3)
{xxx,yyy,zzz...}
大括號擴展,如:
1 cat {file1,file2,file3} > combined_file
2 # 把file1,file2,file3 鏈接在一塊兒,而且重定向到combined_file 中.
3
4 cp file22.{txt,backup}
5 # 拷貝"file22.txt" 到"file22.backup"中
一個命令可能會對大括號中的以逗號分割的文件列表起做用[1]. file globbing 將對
大括號中的文件名做擴展.
注意: 在大括號中,不容許有空白,除非這個空白是有意義的.
echo {file1,file2}\ :{\ A," B",' C'}
file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C
{} 代碼塊.又被稱爲內部組.事實上,這個結構建立了一個匿名的函數.可是與函數不一樣的是,在其中聲明的變量,對於腳本其餘部分的代碼來講仍是可見的.如:
bash $ { local a; a= 123; } bash中的local 申請的變量只可以用在函數中. 1 a=123 2 { a=321; } 3 echo "a = $a" # a = 321 (說明在代碼塊中對變量a 所做的修改,影響了外邊的變量a)