天天看點

linux 冒号指令,Linux Shell 内建指令:冒号(:)

在Linux系統中,冒号(:)常用來做路徑的分隔符(PATH),資料字段的分隔符(/etc/passwd)等。其實,冒号(:)在Bash中也是一個内建指令,它啥也不做,是個空指令、隻起到占一個位置的作用,但有時候确實需要它。當然,它也有它的用途的,否則沒必要存在。在·Linux的幫助頁中說它除了參數擴充和重定向之外不産生任何作用。

gnu 幫助:http://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins

冒号(:)的作用

1)空指令。

2)參數擴充。

3)重定向。

4)當注釋使用。

了解冒号(:)

1)了解空指令。空指令就是什麼也不做,是以傳回碼永遠都是0。雖說是空指令,但仍是指令,就具備一般指令應有的特征,可以象一般指令一樣使用。如

1 [root@localhost test]# :2 [root@localhost test]# echo $?

3 0

4 [root@localhost test]#

可以直接在console中執行。傳回碼為0。

利用這一特性,:可以當true使用。如用在while等循環體中的條件判斷。

2)了解參數擴充。

冒号引起的參數擴充,意思是将參數的值替換為新的值。一般有以下幾種參數擴充用法:

1 ${parameter:-word} 如果parameter沒有設定或者為空,替換為word;否則替換為parameter的值2 ${parameter:+word} 如果parameter沒有設定或者為空,不進行任何替換;否則替換為word。3 ${parameter:=word} 如果parameter沒有設定或者為空,把word指派給parameter。實際parameterd的值真的被替換了,這就是=号的意思。不能用這種方式指派位置參數或特殊參數的值。4 ${parameter:?word} 如果parameter沒有設定或者為空,把word輸出到stderr,否則替換為parameter的值。

-、+、? 實際parameter的值并不被修改,擴充隻是臨時顯示成word的值。準确的講,擴充實際替換的是參數的顯示,而不是參數的定義。隻有=,才是替換參數的定義。5 ${parameter:offset} 擴充為parameter中從offset開始的子字元串。6 ${parameter:offset:length} 擴充為parameter中從offset開始的長度不超過length的字元。

* word前的“-”可以了解為“沒定義,則替換成word”;“+”可以了解為“有定義,則替換成word”。

* word前的“?”可以了解為“參數到底定義了沒,沒定義,把word當錯誤消息列印出來。”

$ foo=hellobash

$echo${foo}

hellobash

$echo ${foo:-newword}

hellobash

$echo${foo}

hellobash

$echo ${foo:+newword}

newword

$echo${foo}

hellobash

$echo ${foo:?newword}

hellobash

$echo${foo}

hellobash

$echo ${foo:=newword}

hellobash

$echo${foo}

hellobash

$ unset foo

$echo${foo}

$echo ${foo:-newword}

newword

$echo${foo}

$echo ${foo:+newword}

$echo${foo}

$echo ${foo:?newword}

bash: foo: newword

$echo${foo}

$echo ${foo:=newword}

newword

$echo${foo}

newword

$echo ${foo:2}

wword

$echo ${foo:2:3}

wwo---------------------

三元運算符

1 $ var=100

2 $ (($var>100?var++:var--))

3)重定向

1 : > test.file

2

3 cat test.file

cat 檔案,什麼也沒有。

4)當注釋用

使用冒号還可以用作注釋行的開始,但是如果有文法錯誤,仍将報錯,這一點與使用#号不同。如:

1 [root@localhost test]# cat test.sh

2

3 fun()4 {5 echo 1222

6 : cccccc7 # llllll8 echo 222221

9 }10

11 fun12