在Bash中,测试数组是否包含某个值的最简单方法是什么
这种方法的优点是不需要在所有元素上循环(至少不显式循环)。但是,由于array.c中的array\u to\u string\u internal()仍然在数组元素上循环并将它们连接成字符串,因此它可能不会比所提出的循环解决方案更有效,但可读性更强
if[[";${array[*]}";=~";${value}";];然后
#当数组包含值时要执行的任何操作
fi
如果[[!";${array[*]}";=~";${value}";];然后
#当数组不包含值时要执行的任何操作
fi
请注意,如果要搜索的值是带有空格的数组元素中的一个单词,则会给出误报。比如说
数组=(“杰克·布朗”)
值=”;“杰克”;
正则表达式将看到;“杰克”;在数组中,即使它不是。因此,如果仍要使用此解决方案,则必须更改IFS和正则表达式上的分隔符,如下所示
IFS="|&引用;
数组=(“杰克·布朗${IFS}杰克·史密斯”
值=”;“杰克”;
如果[[";${IFS}${array[*]}${IFS}";=~";${IFS}${value}${IFS}";];然后
“回声”;“真的”;
其他的
“回声”;假;
fi
取消设置IFS#或如果以前设置,则设置回原始IFS
这将打印;假的
显然,这也可以用作测试语句,允许将其表示为一行
[[";${array[*]}";=~";${value}";]&;“回声”;“真的”“回声”;假;