当我在bash的if循环中使用break
时,它告诉我它对bash无效,我可以使用什么呢?
用例是,用户被问到一个问题,如果他回答'否',脚本应跳到下一部分。
if [[ $ans1_1 = "y" ]]; then
fedoraDeps
elif [[ $ans1_1 = "n" ]]; then
break
else
echo "Answer 'y' or 'n' "
fi
答案 0 :(得分:11)
if
语句不是“循环”,所以突破它们是没有意义的。如果你想让你的一个块成为无操作,你可以使用内置的:
命令,它什么都不做:
if [[ $ans1_1 = y ]]; then
fedoraDeps
elif [[ $ans1_1 = n ]]; then
:
else
echo "Answer 'y' or 'n'"
fi
答案 1 :(得分:3)
对于这个例子,我认为使用case
更有意义。
case $ans1_1 in
y)fedoraDeps;;
n);;
*) echo "Answer 'y' or 'n'";;
esac
来自man bash
:
如果;;使用运算符,在第一个模式匹配后不会尝试后续匹配。
答案 2 :(得分:0)
这听起来像select
命令的理想情况:
PS3="Please make a selection >"
select foo in 'y' 'n'; do
case $foo in
'Y')
fedoraDeps
;;
'y')
fedoraDeps
;;
'n')
break
;;
esac
done
答案 3 :(得分:0)
我同意这种情况可能是最好的。但你应该以任何方式投射到大/小写。对于你的方式:
if [[ ${ans1_1,,} = "y" ]]; then
fedoraDeps
elif [[ ${ans1_1,,} = "n" ]]; then
:
else
echo "Answer 'y' or 'n' "
fi
或者,如果你想要大写的$ {ans1_1 ^^}