如何检查数组中的所有成员是否与unix bash中的某个成员相同

有没有一个循环的方法来检查下列数组中的所有成员是否等于true

 found1=(true true true true); found2=(true false true true); 

您可以使用[[ ]]运算符。 这是一个基于功能的解决方案:

 check_true() { [[ "${*}" =~ ^(true )*true$ ]] return } 

你可以这样使用它:

 $ found1=(true true true true) $ found2=(true false true true) $ check_true ${found1[*]} && echo OK OK $ check_true ${found2[*]} && echo OK 

如果条件满足,OK将显示为结果

这是我的第一个答案,如果我不正确地理解这个问题,不要给我施加压力。

 found1=(true true true true) found2=(true false true true) found3=(true true true true) echo ${found1[*]} && ${found3[*]} echo ${found2[*]} && ${found3[*]} 

OUTPUT:

真实的真实的真实

真假假真真实

我只是使用和运算符与第三个数组,只有真正的。 我也没有使用任何循环。

你可以看到第一个OUTPUT由所有的真实元素组成,因为使用和运算符只有true和true给出true,而true和false(或false和false – 在这种情况下不可能)会给你错误的。

这是您的问题的另一个非常简单的解决方案。

在这里,我首先检查所有元素是否重复。 如果元素是重复的然后

 echo "${array[@]}" | tr ' ' '\n' | sort -u 

将只有一个元素。 希望很清楚。

 check_equal(){ array=$1 if [ `echo "${array[@]}" | tr ' ' '\n' | sort -u | wc -l` = 1 ] && [ ${array[0]} = $2 ] then echo "Equal"; else echo "Not Equal" ; fi } found1=(true true true true); found2=(true false true true); check_equal ${found1[@]} true check_equal ${found2[@]} true