检查Bash数组是否包含值

在Bash中,测试数组是否包含某个值的最简单方法是什么

这种方法的优点是不需要在所有元素上循环(至少不显式循环)。但是,由于array.c中的array\u to\u string\u internal()仍然在数组元素上循环并将它们连接成字符串,因此它可能不会比所提出的循环解决方案更有效,但可读性更强

if[["${array[*]}"=~"${value}"];然后
#当数组包含值时要执行的任何操作
fi
如果[[!"${array[*]}"=~"${value}"];然后
#当数组不包含值时要执行的任何操作
fi

请注意,如果要搜索的值是带有空格的数组元素中的一个单词,则会给出误报。比如说

数组=(“杰克·布朗”)
值=”;“杰克”;

正则表达式将看到;“杰克”;在数组中,即使它不是。因此,如果仍要使用此解决方案,则必须更改IFS和正则表达式上的分隔符,如下所示

IFS=&quot|&引用;
数组=(“杰克·布朗${IFS}杰克·史密斯”
值=”;“杰克”;
如果[["${IFS}${array[*]}${IFS}"=~"${IFS}${value}${IFS}"];然后
“回声”;“真的”;
其他的
“回声”;假;
fi
取消设置IFS#或如果以前设置,则设置回原始IFS

这将打印;假的

显然,这也可以用作测试语句,允许将其表示为一行

[["${array[*]}"=~"${value}"]&“回声”;“真的”“回声”;假;

发表评论