当我知道数组应该为true时,它返回false



我知道这个特定的卷应该显示为true,但它一直返回为false。有人能看到它出了什么问题吗?我猜这和if语句有关,但我不知道是什么。"3D/聚集"是两个单独的字符串,但我想要它,这样如果它们在一起,它就会返回true。这是一个相当长的脚本的开始,所以我想把它作为一个函数,稍后可以调用。提前感谢您的帮助。

#!/bin/bash
session_path=$PWD/testSess/3DBPvol.proc
outPath=""
sess=$session_path
{
    ThreeD="false"
    while read line; do
            IFS=" "
            arr=$(echo ${line})
            unset IFS
            for i in ${arr[@]} ; do
                    if [[ "$i" =~ "3D" ]] && [[ "$i" =~ "Gather" ]]; then
                            ThreeD="true"
                    fi
            done
    done < "$sess"
    echo "Is 3D? $ThreeD"
}
arr=$(echo ${line})

这不会创建数组,您需要额外的parens:

arr=($(echo ${line}))

但你实际上并不需要echo,这应该足够了:

arr=(${line})

所以您想看看/proc下的文件是否包含"3D Gather"?您可以简单地使用grep:

#!/bin/bash
session_path=$PWD/testSess/3DBPvol.proc
grep -q '3D Gather' "$session_path" && ThreeD=true || ThreeD=false
echo "Is 3D? $ThreeD"

似乎不需要将行分解为BASH数组。考虑一下这个rafactored脚本,它做同样的工作,但代码要少得多:

ThreeD="false"
while read line; do
    [[ "$line" == *"3D Gather"* ]] && ThreeD="true" && break
done < "$sess"
echo "Is 3D? $ThreeD"

最新更新