在下面的函数中,我可以迭代数组,如果找到匹配项,则跳出循环并继续程序的其余部分(按预期)。
不过,如果完全没有找到匹配项,我希望该函数退出程序的其余部分。我怎样才能做到这一点? (我不能让它在第一次找不到匹配项时退出,并且将 an 放在exit 1
循环末尾并不能达到我的目的)。
我确信我忽略了一些显而易见的事情,但是什么呢?
#!/usr/bin/env bash
# Array
MATLAB_VERSION=(
MATLAB9.4.app
MATLAB9.3.app
MATLAB9.2.app
MATLAB9.1.app
MATLAB9.0.app
MATLAB8.6.app
MATLAB8.5.app
MATLAB8.3.app
MATLAB8.0.app
MATLAB7.5.app
MATLAB.app
)
matlab_check() {
# is MATLAB*.*.app installed in /Applications?
# iterate through array & tell me what you find
for MATLAB in "${MATLAB_VERSION[@]}";
do
if [ -d "/Applications/$MATLAB" ]; then
printf "%s\\n" "FOUND $MATLAB IN /Applications, CONTINUING..."
break
else
printf "%s\\n" "SEARCHING for $MATLAB in /Applications..."
fi
done
}
matlab_check
答案1
当您找到匹配项时,您可以return
立即从整个功能中进行操作。这样,您可以在循环之后有一个“尾部部分”,仅在未找到匹配项时才运行。像这样的东西:
#!/usr/bin/env bash
# You might not care for this declaration of the array contents,
# but it does the same thing, and keeps my example nice and short
MATLAB_VERSION=( MATLAB{9.{4..0},8.{6,5,3,0},{7.5,}}.app )
# RC 0 = found
# RC 1 = not found
matlab_check() {
for MATLAB in "${MATLAB_VERSION[@]}"; do
if [ -d "/Applications/${MATLAB}" ]; then
echo "Found in ${MATLAB}"
return 0
fi
done
return 1
}
matlab_check
echo rc is $?
如果您不想输出发现地点的详细信息,则该if..fi
部分可以减少到仅此。不需要使用,return 0
因为此时我们知道 $?必须为 0,因此return
没有参数。
[ -d "/Applications/${MATLAB}" ] && return