局部变量如何获取此bash shell函数的参数值?

时间:2013-11-01 23:34:11

标签: bash function

我有一些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如何迭代获取值?

1 个答案:

答案 0 :(得分:2)

local的示例用法是:

local a b c=d e=f g

这意味着abceg在本地定义,c的值为{{ 1}}和d的值为e,变量fab的值已重置为空。

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

现在,

hay

的快捷方式
for hay; do

(有些人会说,它更具可移植性,这就是有些人使用它的原因---有些人通过懒惰使用它(比较击键次数)---其他人只是不使用它。)

现在我猜你已经拥有了所有这些!

顺便说一下,这个函数编写得很好(除了前面提到的捷径for hay in "$@"; do )。