在 Bash 中,测试数组是否包含某个值的最简单方法是什么?
这种方法的优点是不需要循环所有元素(至少不需要显式循环)。但是由于array_to_string_internal()
in 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
这将打印“假”。
显然这也可以用作测试语句,允许将其表示为一行
[[ " ${array[*]} " =~ " ${value} " ]] && echo "true" || echo "false"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)