有没有一个循环的方法来检查下列数组中的所有成员是否等于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