Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Bash:检查关联数组的所有值是否等于_Arrays_Bash_Foreach - Fatal编程技术网

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

谢谢,我很难理解如何跟踪这些问题,所以如果有匹配项,我就创建了一个递增计数器。已经在下面发布了我的解决方案。