这个访问数组的函数是如何工作的?

这个访问数组的函数是如何工作的?

我想判断一个字符串是否在数组中。我在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

相关内容