我有一个动态创建的关联数组。我不知道会有多少项目或者他们的名字会是什么,但这是我创建的一个例子: -
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'或者'活跃的'第一个代码块与第二个代码块匹配。
希望这是有道理的。
答案 0 :(得分:0)
您可以使用${MDARRAY[@]}
获取所有值,并使用for
循环来检查每个值。
答案 1 :(得分:0)
在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