我知道这个特定的卷应该显示为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"