SHELL十三問之七 與 差在哪?

2021-05-06 07:43:25 字數 3015 閱讀 9671

先說一下,為何要用

( )或

好了。qw8l8}:m_1

許多時候,我們在

shell

操作上,需要在一定條件下一次執行多個命令,也就是說,要麼不執行,要麼就全執行,而不是每次依序的判斷是否要執行下乙個命令。或是,需要從一些命令執行優先次順中得到豁免,如算術的

2*(3+4)

那樣...

這時候,我們就可引入

"命令群組

"(command group)

的概念:將多個命令集中處理。

y[jj*q9s)d1

bsd愛好者樂園y"t!t5e&xgbk

在shell command line

中,一般人或許不太計較

( )與

這兩對符號的差異,雖然兩者都可將多個命令作群組化處理,但若從技術細節上,卻是很不一樣的:

5x6nagx:l1

( )將

command group

置於sub-shell

去執行,也稱

nested sub-shell

。bsd愛好者樂園dhe!h,n

則是在同乙個

shell

內完成,也稱為

non-named command group

。bsd愛好者樂園h�i|l}�p-el

如果你對上一章的

fork

與source

的概念還記得的話,那就不難理解兩者的差異了。

1on,c&e@!ya1

bsd愛好者樂園/;v3e3`5u!~zl]

要是在command group

中扯上變數及其它環境的修改,我們可以根據不同的需求來使用

( )或

。通常而言,若所作的修改是臨時的,且不想影響原有或以後的設定,那我們就

nested sub-shell

,反之,則用

non-named command group

。fo fw)u(p^1

bsd愛好者樂園(?3?]cfg4m1b0e

是的,光從

command line

來看,( )

與的差別就講完了,夠輕鬆吧

~~~  ^_^

bsd愛好者樂園0/[o

了吧?

k4mg5t%^#q r1

kl:r c�h!fnw1

在bash

中,function

的定義方式有兩種:

,~6y8h rl1

方式一:

bsd愛好者樂園s%b,h.fum

function function_name

t;x5j^2o w1

方式二:

v,w)l y|-prwt1

fuction_name () 1

command1bsd愛好者樂園'q0axdnu

command2

l ]kw8r[fl$/1

command3

#p}c*k clz1

....bsd愛好者樂園3q$t)[xq+^.i}

q4crp:bnao!b1

用哪一種方式無所謂,只是若碰到所定義的名稱與現有的命令或別名

(alias)

衝突的話,方式二或許會失敗。

bzy7q7tt1

但方式二起碼可以少打

function

這一串英文本母,對懶人來說(如我

),又何樂不為呢?

...  ^_^bsd愛好者樂園?9c,cw$h

,zk~c%a/s~'j�y1function

在某一程度來說,也可稱為"函式

",但請不要與傳統程式設計所使用的函式

(library)

搞混了,畢竟兩者差異很大。

0cc6l3~/~$kh;d1

惟一相同的是,我們都可以隨時用

"已定義的名稱

"來呼叫它們

...

)^8pb fp8x1

%/d(ah'gsb1

若我們在

shell

操作中,需要不斷的重複執行某些命令,我們首先想到的,或許是將命令寫成命令稿

(shell script)

。不過,我們也可以寫成

function

,然後在

command line

中打上function_name

就可當一舨的

script

來使用了。只是若你在

shell

中定義的

function

,除了可用

unset function_name

取消外,一旦退出

shell

,function

也跟著取消。

bsd愛好者樂園w{3jad _

然而,在

script

中使用function

卻有許多好處,除了可以提高整體

script

的執行效能外

(因為已被載入

),還可以節省許多重複的**

...bsd愛好者樂園 g%u u,d.qt

bsd愛好者樂園]^/fmn~8j!v

簡單而言,若你會將多個命令寫成

script

以供呼叫的話,那,你可以將

function

看成是script

中的script ...  ^_^bsd愛好者樂園5lk)pfxx/@

而且,透過上一章介紹的

source

命令,我們可以自行定義許許多多好用的

function

,再集中寫在特定檔案中,然後,在其它的

script

中用source

將它們載入並反覆執行。

l7k~ k'w(rjg {1

若你是redhat linux

的使用者,或許,已經猜得出

/etc/rc.d/init.d/functions

這個檔案是作啥用的了

~~~  ^_^

SHELL十三問之十 與 差在哪?

在解答本章題目之前,先讓我們了解乙個概念 return value jdb id gy a我們在shell下跑的每乙個 command 或 function 在結束的時候都會傳回父程序乙個值,稱為 return value x9zjx x w9 q bsd愛好者樂園 ques9trm return ...

Shell十三問之十 與 差在哪

好不容易,進入兩位數的章節了.一路走來,很辛苦吧?也很快樂吧?在解答本章題目之前,先讓我們了解乙個概念 return value 我們在 shell 下跑的每乙個 command 或 function 在結束的時候都會傳回父行程乙個值,稱為 return value 在 shell command ...

Shell 十三問整理

組成 literal meta 就是一些字母單詞,組成命令的 特殊保留字元,對於shell有特殊意義 重點meta有分command meta和shell meta 舉例awk 1.txt 這裡 會被解釋成shell meta。awk 1.txt 中的 被解釋成command meta 常見meta...