我想判断一个字符串是否在数组中。我在Google上找到了以下功能。但我无法完全理解这个函数的含义。在此函数中,match
被分配给要匹配的字符串。但是数组保存在哪里呢?我添加了一些输出,但变量e
始终为空。我查了一下 的意思shift
。它将变量向左移动并移动$2
到$1
。但后来就没啥用了$1
。有谁知道这个功能是如何工作的?非常感谢。
containsElement () {
local e match="$1"
echo $match
echo $e
shift
echo $e
echo $match
for e; do [[ "$e" == "$match" ]] && return 0; done
return 1
}
array=("something to search for" " for" "a string" "test2000")
containsElement "a string" "${array[@]}"
echo $?
答案1
来自 man bash:
为了姓名[ [ 在 [单词...]]; ] 做列表;完成
...
如果“在单词" 省略,则执行 for 命令 列表 对于每个设置的位置参数一次
实际上,它会做同样的事情:
for e in "$@"; do
在命令之后,只有数组元素保留在循环迭代shift
的位置参数中。for