3

我有一段我不太明白的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迭代地获取值?

4

1 回答 1

2

的一个示例用途local是:

local a b c=d e=f g

这意味着a, b, c,eg是局部定义的,并且is的值和cisd的值和变量,并将它们的值重置为空。efabg

所以你现在明白了你的第一行(即为什么是hay空的)。

现在,

for hay; do

是一个捷径

for hay in "$@"; do

(有些人会说,它更便携,这就是为什么有些人使用它 --- 有些人因为懒惰而使用它(比较击键次数)--- 有些人只是不使用它)。

现在我想你已经掌握了一切!

顺便说一句,这个函数写得很好(除了前面提到的捷径:D)。

于 2013-11-01T23:47:00.163 回答