shell中指令碼與函式的使用策略
指令碼:執行的副作用不影響父環境,開闢了fork子程序;
函式:副作用,定義的變數,資料預設直接新增到了呼叫者的環境,也是它自己的環境;不想副作用影響呼叫者環境,就必須主動用local修飾;
指令碼可以使用source退化為函式;
儘量使用指令碼,而不是函式,除非函式本身就是系統級別的作用範圍;
使用指令碼的好處
1.把函式封裝在指令碼中可以形成類似於檔案範圍的訪問隔離;
2.指令碼是檔案級別的東西,檔案目錄,絕對路徑本身就給它帶來版本區分,作用範圍劃分的優勢.
3.linux檔案有快取機制,指令碼不會明顯的比記憶體中的函式慢,而且4.2以上版本的bash還可能直接把命令名和指令碼路徑hash繫結.
4.函式從檔案載入到環境後,修改函式需要重寫後需要重新載入.指令碼檔案不存在這個步驟. 函式也是要用指令碼檔案落地到磁碟的.
相關推薦
shell中指令碼與函式的使用策略
指令碼:執行的副作用不影響父環境,開闢了fork子程序; 函式:副作用,定義的變數,資料預設直接新增到了呼叫者的環境,也是它自己的環境;不想副作用影響呼叫者環境,就必須主動用local修飾; 指令碼可以使用source退化為函式; 儘量使用指令碼,而不是函式,除非函式本身就是系統級別的作
shell中$(( ))和$[]與$( )還有${ }的區別
n) 變量替換 ask 進制 不足 都是 反引號 arr not $( )與` `(反引號)在bash shell中,$( )與` `(反引號)都是用來做命令替換(command substitution)用的。# echo `which who`# echo $(whic
C++中巨集與函式的區別
巨集在編譯時就被替換成它內部的語句了,而函式是執行時呼叫的 所以如果是簡單的東西就寫成巨集,這樣沒有呼叫函式的開銷,效率會高一些。相反,由於巨集每被呼叫一次,就相當於把程式碼複製一份,所以如果比較複雜的巨集被多次呼叫的話,會增加程式碼的體積。因此,太複雜的運算就寫成函式比較好了。 另外,要注意在巨集
shell中uniq與sort -u 兩種去重的對別
記錄 功能 fff cat 信息 執行 刪除重復 命令 容易 sort -u 和 uniq都能起到刪除重復信息的功能,那麽他們的區別究竟在哪呢?$ cat test jasonjasonjasonfffffjason 下面分別執行三個命令 1:so
shell中的系統函式
shell中的系統函式 函式介紹 shell 程式設計和其它程式語言一樣,有系統函式,也可以自定義函式。系統函式中,我們這裡就介紹兩個。 系統函式 basename 基本語法 功能:返回完整路徑最後 / 的部分,常用於獲取檔名 basename [pathname] [suffi
Kibana中doc與search策略的區別
在kibana中包含兩種策略:doc和search。使用了兩個迴圈佇列來獲取請求,並進行響應。 doc的程式碼如下: clientMethod: 'mget' search的程式碼如下: clientMethod: 'msearch' 通過查詢api可以發現: mget命令,可以執行多個查詢。但是查詢條件基本
Shell中w與who列出Linux系統登入使用者
w命令 描述 用於顯示登入的使用者及他們當前執行的程序 例項 [[email protected] ~]# w 07:55:56 up 11 min, 3 us
Shell中指令碼變數的作用域
轉自:http://www.2cto.com/os/201301/182260.html 在shell中定義函式可以使程式碼模組化,便於複用程式碼。不過指令碼本身的變數和函式 的變數的作用域問題可能令你費解,在這裡梳理一下這個問題。 (1)Shell指令碼中定義的
Shell中BASH與KSH使用管道時的差別
注:此文涉及實際專案原始碼截圖,檢視時可不關注處理邏輯! 根據測試與實際的使用過程中發現:BASH中管道內都為子程序,而KSH中最後一個管道為父程序其他為子程序!(簡單的測試過程放在最後)。因此KSH與BASH轉換時,在使用管道的地方,有以下幾種情況時,需要
shell中後臺執行函式
在shell中定義好的函式,執行的時候可以直接在腳本里面通過func &方式後臺執行。 一開始我很好奇為什麼shell腳本里面定義好的函式可以這麼用,通常我們在指令碼中都是以後臺方式執行其它的指令碼或者命令。 於是做了如下一個實驗: new() {
linux shell中邏輯與,或表示式
與&& 1)if [ $str=a -a $str=b ] 2)if [ $str=a ] && [ $str=b ] 或||: 1)if [ $str=a -o
OC中方法與函式的區別
方法:方法是Objective-C獨有的一種結構,只能在Objective-C中宣告、定義和使用,C語言不能宣告、定義和使用。1、類方法以+號開頭,物件方法以-號開頭+ (void) init; // 類方法- (void) show;
shell中$(( ))、$( )與${ }的區別
在bash中,$( )與` `(反引號)都是用來作命令替換的。 命令替換與變數替換差不多,都是用來重組命令列的,先完成引號裡的命令列,然後將其結果替換出來,再重組成新的命令列。 例子: $ echo today is $(date "+%Y-%m-%d
Shell指令碼(三)-Shell中的變數、函式及read命令
在Shell指令碼中,通常需要在Shell命令使用其他資料來處理資訊。這就需要使用變數來實現,變數可以將資訊臨時儲存在Shell執行環境中,以便和指令碼中的其他命令一起使用。變數的型別系統變數:系統變數通常寫在/etc/profile或/etc/profile.d中,對所有使
shell中規則表達式與特殊符號
命令 分享 目錄 輸入 特殊符號 bcd cnblogs span tool 在 bash 的操作環境中還有一個非常有用的功能,那就是通配符 (wildcard) ! 我們利用 bash 處理數據就更方便了!底下我們列出一些常用的通配符喔: 符號 意義 * 代表『
Shell中條件判斷語法與判斷條件
expression 表達式 字符串 linux 影響 一,簡介Shell各種判斷結構和運算符的用法是shell編程的基礎,了解shell的判斷、運算符和一些退出狀態對後面的學習有很重要的影響。shell有一個內部命令test經常用於對判斷語句進行測試一種或幾種狀態的條件是否成立二. 判斷
Shell中的>/dev/null 2>&1 與 2>&1 >/dev/null 與&>/dev/null 的區別
文件描述符 art 應該 tar 輸入 情況 style 鍵盤 blog 默認情況下,總是有三個文件處於打開狀態,標準輸入(鍵盤輸入)、標準輸出(輸出到屏幕)、標準錯誤(也是輸出到屏幕),它們分別對應的文件描述符是0,1,2 。那麽我們來看看下面的幾種重定向方法的區別: &
shell中的變量與eval(轉)
use web ech 讀取 eva bin 報錯 href 命令行 原文鏈接:http://www.361way.com/shell-eval-variable/4957.html shell 中經常會用到變量的嵌套的情況。比如,單個或多個變量的值作為變量名,再對該變量名
shell中$*與[email protected]的區別
劃分 位置 一個 這也 差異 獨立 [email protected] 情況 雙引號 $*所有的位置參數,被作為一個單詞 註意:"$*"必須被""引用 [email protected] 與$*同義,但是每個參數都是一個獨立的""引用字串,這就意味著參數
shell中$(( ))與$( )還有${ }的區別
大於 day tail tin 情況 二進制 art 結果 區別 $( )與` `(反引號) 在bash shell中,$( )與` `(反引號)都是用來做命令替換(command substitution)用的。 $ echo the last sunday is $(d