2013-11-01 54 views
3

我已經外殼功能的片斷我真的不明白:本地變量如何獲取此bash shell函數的參數值?

# Check if a value exists in an array 

# @param $1 mixed Needle 
# @param $2 array Haystack 
# @return Success (0) if value exists, Failure (1) otherwise 
# Usage: in_array "$needle" "${haystack[@]}" 
# See: http://fvue.nl/wiki/Bash:_Check_if_array_element_exists 
in_array() { 
    local hay needle=$1 
    shift 
    echo $hay 
    for hay; do 
     echo $hay 
     [[ $hay == $needle ]] && return 0 
    done 
    return 1 
} 

下面是一個運行的輸出:

$ in_array a b c a 

b 
c 
a 

如何hay得到命令行參數值?爲什麼在for循環之前它是空的? hay如何迭代獲取值?

回答

2

一個例子使用了local是:

local a b c=d e=f g 

,這意味着abceg定義的本地和的c值爲de值爲f和變量a,bg將它們的值重置爲空。

因此,您現在瞭解您的第一行(即爲什麼是hay爲空)。

現在,

for hay; do 

是一條捷徑

for hay in "[email protected]"; do 

(其中,有些人會說,更便於攜帶,這就是爲什麼有人用它---一些人被惰性所消磨使用它(比較擊鍵次數)---其他一些則不用)。

現在我想你已經掌握了一切!

順便說一句,函數寫得非常好(除了前面提到的快捷方式:D)。