我知道这个特定的卷应该是真实的,但它会一直返回为假。有人能看出它有什么问题吗?我的猜测是它与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"
}
答案 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"