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

时间:2013-12-03 05:47:54

标签: arrays string bash

我知道这个特定的卷应该是真实的,但它会一直返回为假。有人能看出它有什么问题吗?我的猜测是它与if语句有关,但我不知道是什么。 “3D / Gather”是两个单独的字符串,但我想要它,如果它们在一起,那么它返回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"
}

3 个答案:

答案 0 :(得分:1)

arr=$(echo ${line})

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

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

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

arr=(${line})

答案 1 :(得分:1)

所以你想看看/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"

答案 2 :(得分:1)

看起来你不需要将这条线分成BASH数组。考虑这个具有相同作用但却代码少得多的重要脚本:

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