Arrays Bash:检查关联数组的所有值是否等于
我有一个动态创建的关联数组。我不知道会有多少个项目或它们的名称,但这是我创建的一个示例:-Arrays Bash:检查关联数组的所有值是否等于,arrays,bash,foreach,Arrays,Bash,Foreach,我有一个动态创建的关联数组。我不知道会有多少个项目或它们的名称,但这是我创建的一个示例:- declare -A MDARRAY MDARRAY[md126]="clean" MDARRAY[md127]="degraded" 我想将每个数组项的值与几个字符串进行比较。例如,所需结果类似于:- if [ "$MDARRAY[md126]" != "clean" || "$MDARRAY[md126]" != "active" && "$MDARRAY[md127]" != "c
declare -A MDARRAY
MDARRAY[md126]="clean"
MDARRAY[md127]="degraded"
我想将每个数组项的值与几个字符串进行比较。例如,所需结果类似于:-
if [ "$MDARRAY[md126]" != "clean" || "$MDARRAY[md126]" != "active" && "$MDARRAY[md127]" != "clean" || "$MDARRAY[md127]" != "active" ]; then
...
else
...
fi
如果有5个数组项,它将检查所有5个,如果其中任何一个不等于“clean”或“active”,则第一个代码块将与第二个代码块匹配
希望这是有意义的。您可以使用
${MDARRAY[@]}
获取所有值,并使用for
循环检查每个值。在Karoly的帮助下,我的解决方案:-
clean=0
for i in "${!MDARRAY[@]}"; do
# Compare the state of the devices
if [ "${MDARRAY[$i]}" != "clean" ] && [ "${MDARRAY[$i]}" != "active" ] ; then
# Increment error count
((clean=clean+1))
# Add device name to array if error
BADARRAY=(${BADARRAY[@]} $i)
fi
done
谢谢,我很难理解如何跟踪这些问题,所以如果有匹配项,我就创建了一个递增计数器。已经在下面发布了我的解决方案。