解析如何在Bash中編寫函式
在程式設計時,實際上是在定義要由計算機執行的過程或例程。一個簡單的類比是將計算機程式設計與烤麵包進行比較:你一次列出了要組建工作環境的配料,然後列出了烤麵包所必須採取的步驟。在程式設計和烘烤中,必須以不同的間隔重複執行某些步驟。
|
在程式設計時,實際上是在定義要由計算機執行的過程procedure或例程routine。一個簡單的類比是將計算機程式設計與烤麵包進行比較:你一次列出了要組建工作環境的配料,然後列出了烤麵包所必須採取的步驟。在程式設計和烘烤中,必須以不同的間隔重複執行某些步驟。例如,在烤麵包中,這可能是酵母培養的過程:
STIR=100 SNOOZE=86400 function feed_culture { remove_from(pantry) add(flour, water) stir($STIR) sleep($SNOOZE) }
然後,揉麵和醒發麵團:
KNEAD=600 SNOOZE=7200 function process_dough { remove_from(proofing_drawer) knead($KNEAD) return_to_drawer($SNOOZE) }
在程式設計中,這些子例程subroutines可以表示為函式function。函式對程式設計師很重要,因為它們有助於減少程式碼中的冗餘,從而減少了所需的維護量。例如,在以程式設計方式烤制面包的假想場景中,如果你需要更改麵糰醒發的用時,只要你之前使用函式,那麼你只需更改一次用時,或使用變數(在示例程式碼中為 SNOOZE)或直接在處理麵糰的子程式中更改用時。這樣可以節省你很多時間,因為你不必透過你的程式碼庫遍歷每個可能正在醒發的麵糰,更不用說擔心錯過一個。許多 bug 是由未更改的缺失的值或執行不正確的 sed 引起的,它們希望捕獲所有可能而不必手動尋找。
在 Bash 中,無論是在編寫的 或在獨立的檔案中,定義函式和使用它們一樣簡單。如果將函式儲存到獨立的檔案中。那麼可以將它 source 到 中,就像 include C 語言或 C++ 中的庫或將模組 import 到 Python 中一樣。要建立一個 Bash 函式,請使用關鍵字 function:
function foo { # code here }
這是一個如何在函式中使用引數的例子(有些人為設計,因此可能會更簡單):
#!/usr/bin/env bash ARG=$1 function mimic { if [[ -z $ARG ]]; then ARG='world' fi echo "hello $ARG" } mimic $ARG
結果如下:
$ ./mimic hello world $ ./mimic everybody hello everybody
請注意指令碼的最後一行,它會執行該函式。對於編寫指令碼的新手來說,這是一個普遍的困惑點:函式不會自動執行。它們作為潛在的例程存在,直到被呼叫。
如果沒有呼叫該函式,那麼函式只是被定義,並且永遠不會執行。
如果你剛接觸 Bash,請嘗試在包含最後一行的情況下執行示例指令碼一次,然後在註釋掉最後一行的情況下再次執行示例指令碼。
即使對於簡單的指令碼,函式也是很重要的程式設計概念。你越適應函式,在面對一個不僅需要宣告性的 行,還需要更多動態的複雜問題時,你就會越容易。將通用函式儲存在單獨的檔案中還可以節省一些工作,因為它將幫助你建立常用的程式,以便你可以在專案間重用它們。看看你的指令碼習慣,看是否適合使用函式。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2700713/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何編寫冪等的Bash指令碼(函式)? · Fatih Arslan指令碼函式
- Bash函式函式
- js編寫trim()函式JS函式
- 如何在函式計算內部中自定義DNS解析函式DNS
- 如何編寫翻頁函式?函式
- c函式編寫規範函式
- 如何更好的編寫async函式函式
- 如何在 Bash 中抽取子字串字串
- 在 bash 中使用函式函式
- 在Dash中更靈活地編寫回撥函式函式
- 資源管理器中編寫分類器函式函式
- bash函式應用之:判斷函式是否存在函式
- 簡易表示式解析器編寫
- 從如何編寫冪等Bash指令碼瞭解怎麼實現冪等函式? · Fatih Arslan指令碼函式
- [譯] 編寫函式式的 JavaScript 實用指南函式JavaScript
- 第2章 編寫測試函式函式
- 用TypeScript編寫釋出函式庫TypeScript函式
- 從彙編視角解析函式呼叫中的堆疊運作函式
- PHP 字串中直接解析函式的寫法PHP字串函式
- Python中的main函式解析PythonAI函式
- [譯] 解析 Go 中的函式呼叫Go函式
- PHP中preg_replace函式解析PHP函式
- 編寫小而美函式的藝術函式
- C++ 的函式分檔案編寫C++函式
- 函式可重入性及編寫規範函式
- 如何在函式內部定義函式?函式
- QTP指令碼編寫技巧 - 從函式中返回多個值的方法QT指令碼函式
- Bash 是如何從環境變數中匯入函式的變數函式
- 如何在 Deno 應用程式中呼叫 Rust 函式Rust函式
- 如何在Python中實現函式過載Python函式
- 如何在 Flutter 中整合華為雲函式服務Flutter函式
- 如何編寫高質量的函式 -- 敲山震虎篇函式
- 編寫一個通用的事件監聽函式事件函式
- 一個用lua編寫的自定義函式函式
- Hive中配置與編寫自定義UDF函式Hive函式
- 提高程式碼質量:如何編寫函式函式
- 編寫自己的php擴充套件函式 (轉)PHP套件函式
- 呼叫函式:如把ssha的值在SSHA的框中輸出函式