我正在教自己bash,并使用Learning the bash Shell这样做。
我在流量控制中注意到我们将if / else语句定义为:
if [ statement_is_true ]; then
# do stuff here
elif [ some_other_statement]; then
# other thing
else
# if all else fails
fi
和案例陈述:
case $expr in
case1 )
;;
case2 )
;;
esac
但for循环可能被定义为
for i in $list;
do
# something cool with the various $i
done
和while循环
while [ condition ]; do
# something that loops
done
为什么for
,while
和until
循环的末尾用done
而不是rof
,elihw
表示,以及litnu
分别与if/fi
和case/esac
结构一样? (或者,为什么它是if/fi
而不是if/done
?
答案 0 :(得分:7)
我怀疑它只是可读性,因为litnu
比esac
更难阅读/发音。例如,请参阅this book,其中“end
得分高于nigeb
,原因显而易见。”
fi
和esac
很容易发音并与其他代码区分开来。 do...done
结构还在循环结构中提供了一致的语法,这可能比所有控制流语句中的一致语法更明智。