Linux Shell 內建命令:冒號(:)


https://blog.csdn.net/honghuzhilangzixin/article/details/7073312/

在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的字符。

原文:https://blog.csdn.net/ieearth/article/details/52589020

* 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
--------------------- 
以上例子轉自https://blog.csdn.net/ieearth/article/details/52589020 

三元運算符

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    : cccccc
 7    # llllll
 8    echo 222221
 9 }
10 
11 fun
12 
13 [root@localhost test]# sh test.sh
14 1222
15 222221

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM