在 Bash 中,测试数组是否包含某个值的最简单方法是什么?
最佳答案
这种方法的优点是不需要遍历所有元素(至少不需要显式)。但是自从 array_to_string_internal()
在 array.c仍然循环遍历数组元素并将它们连接成一个字符串,它可能并不比建议的循环解决方案更有效,但它更具可读性。
if [[ " ${array[*]} " =~ " ${value} " ]]; then
# whatever you want to do when array contains value
fi
if [[ ! " ${array[*]} " =~ " ${value} " ]]; then
# whatever you want to do when array doesn't contain value
fi
请注意,如果您要搜索的值是带空格的数组元素中的单词之一,则会给出误报。例如
array=("Jack Brown")
value="Jack"
正则表达式会将“Jack”视为在数组中,即使它不在数组中也是如此。因此,如果您仍想使用此解决方案,则必须更改正则表达式中的 IFS
和分隔符,如下所示
IFS="|"
array=("Jack Brown${IFS}Jack Smith")
value="Jack"
if [[ "${IFS}${array[*]}${IFS}" =~ "${IFS}${value}${IFS}" ]]; then
echo "true"
else
echo "false"
fi
unset IFS # or set back to original IFS if previously set
这将打印“false”。
显然这也可以作为一个测试语句,允许它被表达为一行
[[ " ${array[*]} " =~ " ${value} " ]] && echo "true" || echo "false"
关于arrays - 检查 Bash 数组是否包含值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3685970/