1. 程式人生 > >bash shell函式的定義及變數的簡單說明

bash shell函式的定義及變數的簡單說明

From: http://blog.sina.com.cn/s/blog_4ce3a68a0100i77a.html

函式:

“函式是一種指令碼內指令碼”,程式設計師很難想像沒有函式的日子,至少我會比較痛恨。

所以瞭解函式的定義也就是學習bash的一大要點了。

函式大大增強了shell的程式設計能力,主要原因有如下兩點:

  1. 當你呼叫一個函式時,它已經在shell的記憶體中;因此函式執行的很快。
  2. 將較長的shell指令碼組織成各種容易開發和維護的模組是理想的。


呃,針對第一點,現在計算機的記憶體那是相當的便宜,大家不用再擔心錢了吧?

來個4G的條子,當然用XP你就用3.5G吧,除非你擴充套件一下。。

定義一個函式,就是令shell在記憶體中儲存其名字和定義(也就是其包含的shell命令)。如果你要在以後執行函式,只須鍵入其名字,後跟任意引數即可,就好像它是一個shell指令碼

要定義一個函式有兩種格式

function functname
{
      shellcommands
}

functname()
{
     shellcommands
}

這倆方法,其實是一樣的,沒啥本質及功能上的區別。

使用unset -f functname刪除一個函式定義。

unset -ffunctname

可以使用如下命令來查詢到登入會話裡定義的函式

declare -f

嘿嘿,咋樣?是不是顯示的內容太長?嗯。用管道命令more來輸出吧

declare -f|more

如果只想看函式名的話就用

declare -F

除了優勢,函式和指令碼有兩個重要差別

  1. 當通過名字呼叫時,函式不在單獨程序裡執行,而指令碼卻可以。執行一個函式的語義更類似於登入時.bash_profile中的命令或用source命令呼叫指令碼時的情況。
  2. 如果一個函式與一個指令碼或可執行程式(也有可能是指令碼啊)有相同的名字,則函式優先。

看出來了吧?“函式優先”,為啥呢?這裡說一下在shell中鍵入一個命令時,各種資源的優先順序次序:

  1. 別名
  2. 關鍵字,例如function,以及if和for等
  3. 函式
  4. 內建命令,如cd和type等
  5. 指令碼和可執行程式(在最後哦),shell按在PATH環境變數中列出的目錄中對其進行搜尋

不過,呃,這個順序是可以改變的哈。可以使用內建的command builtin和enable改變優先順序次序。

它允許你將函式、別名和指令碼檔案定義為同樣的名字,並選擇要執行的一個。

變數:
呼,終於說到變量了。。嗯。沒事這個短。。

簡單地說:變數被命名用以儲存資料,通常格式為字串,其值可使用$符號加名字獲得。某些變數稱為環境變數,按慣例以大寫字母命名,其取值對子進行已知(使用export語句)

呵,就這些。嘿嘿。。因為後面的內容不能放在這一節裡了。太長了,呼呼。。

相關文章