我有一个数组
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 数组中针的第一个位置的索引,如果未找到针,则不打印任何内容。