如何在数组中搜索单词

如何在数组中搜索单词

我有一个数组

array=("a b" "c d")

现在我必须搜索a b并找到发生的情况。该如何处理?

答案1

当你在新行上打印每个数组元素,你可以使用 grep:

printf '%s\n' "${array[@]}" | grep "a b"

如果数组元素包含\n,最好使用\0grep -z (感谢@muru)

printf '%s\0' "${array[@]}" | grep -z "a b"

答案2

使用 bash:

array=("a b" "c d")

for ((i=0; i<${#array[@]}; i++)); do
  if [[ ${array[$i]} == "a b" ]]; then
    echo "Element $i matched"
  fi
done

输出:

元素 0 匹配

${#array[@]}包含数组中最后一个元素的数量。

答案3

此 SO 问答建议一种执行搜索的方法

针对您的问题实施:

#!/bin/bash
array=("a b" "c d")
value="a b"
if [[ " ${array[@]} " =~ " ${value} " ]]; then
   echo found $value
fi

输出:

found a b

答案4

Cyrus 答案的函数形式的变体:

function find_in_array() {
    local needle="$1"
    shift
    local haystack=("$@")
    for ((i=0; i<${#haystack[@]}; i++)); do
      if [[ ${haystack[$i]} == "$needle" ]]; then
        echo $i
      fi
    done
}

这将打印出 haystack 数组中针的第一个位置的索引,如果未找到针,则不打印任何内容。

相关内容