bash 內建命令與關鍵字的區別

    內建命令指的就是包含在Bash工具包中的命令, 從字面意思上看就是 built in. 這主要是考慮到執行效率的問題,內建命令將比外部命令執行的更快:

    一部分原因是因爲外部命令通常都需要fork出一個單獨的進程來執行.

    一部分原因是特定的內建命令需要直接訪問shell的內核部分.
 
    當一個命令或者是shell本身需要初始化(或者創建)一個新的子進程來執行一個任務的時候, 這種行爲被稱爲fork. 這個新產生的進程被叫做子進程, 並且這個進程是從父進程中fork出來的. 當子進程執行它的任務時, 父進程也在運行.
 
注意: 當父進程獲得了子進程的進程ID時, 父進程可以給子進程傳遞參數, 然而反過來卻不行. 這將會產生不可思議的並且很難追蹤的問題.
 
    通常情況下, 腳本中的Bash內建命令在運行的時候是不會fork出一個子進程的. 但是腳本中的外部或者過濾命令通常會fork出一個子進程.
 
    一個內建命令通常會與一個系統命令同名, 但是Bash在內部重新實現了這些命令. 比如, Bash的echo命令與/bin/echo就不盡相同, 雖然它們的行爲在絕大多數情況下都是一樣的.
 

    關鍵字的意思就是保留字, 對於shell來說關鍵字具有特殊的含義, 並且用來構建shell語法結構. 比如, “for”, “while”, “do”, 和 “!” 都是關鍵字. 與內建命令相似的是, 關鍵字也是Bash的骨幹部分, 但是與內建命令不同的是, 關鍵字本身並不是一個命令, 而是一個比較大的命令結構的一部分.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章