先說一下,為何要用
( )或
好了。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...