arrays - 检查 Bash 数组是否包含值

标签 arrays bash

在 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/

相关文章:

bash - 维护 cronjobs 和 shell 脚本的最佳实践?

java - 打开 shell 并使用 Java 进行交互

bash - 在 bash 中检查命令行标志的正确方法

linux - 遍历列表并创建目录(或者为什么这个循环中断)

javascript - 向数组内的现有对象添加属性

javascript - 如何为数组中的相同字符串值生成永久的 React 键?

javascript - 在字符串连接内执行映射函数

javascript - 将包含字符串和数字的 JavaScript 数组排序为仅数字数组和仅字符串数组

javascript - 返回未定义的数组方法

bash - 如何使用来自wsl控制台的别名从容器运行terraform?