![如何在数组中搜索单词](https://linux22.com/image/1203797/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%95%B0%E7%BB%84%E4%B8%AD%E6%90%9C%E7%B4%A2%E5%8D%95%E8%AF%8D.png)
我有一个数组
array=("a b" "c d")
现在我必须搜索a b
并找到发生的情况。该如何处理?
答案1
当你在新行上打印每个数组元素,你可以使用 grep:
printf '%s\n' "${array[@]}" | grep "a b"
如果数组元素包含\n
,最好使用\0
和grep -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 数组中针的第一个位置的索引,如果未找到针,则不打印任何内容。