以下の関数では配列を繰り返すことができ、一致するものが見つかったらループを中断し(予想どおり)、プログラムの残りの部分を続けます。
しかし、一致するものがまったくない場合は、関数がプログラムの残りの部分を終了するようにしたいと思います。どうすればいいですか? (最初に一致するものが見つからない場合は終了できません。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