为什么bash的流控制结构不一致?

Dan*_*hoa 7 bash

我正在自学bash,并使用学习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
Run Code Online (Sandbox Code Playgroud)

以及一个案例陈述:

case $expr in
    case1 )
        ;;
    case2 )
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

但是for循环可能被定义为

for i in $list;
do
    # something cool with the various $i
done
Run Code Online (Sandbox Code Playgroud)

和一个循环作为

while [ condition ]; do
    # something that loops
done
Run Code Online (Sandbox Code Playgroud)

为什么结束for,while以及until循环标注done,而不是rof,elihwlitnu分别,喜欢if/ficase/esac建设?(或者,它为什么不if/fi代替if/done

Pat*_*ins 7

我怀疑它只是可读性,因为litnu它比阅读/发音要困难得多esac.例如,请参阅本书,其中" 因显而易见的原因而end得分nigeb".

fi并且esac易于发音并与其他代码区分开来.该do...done结构还在循环结构中提供了一致的语法,这可能比所有控制流语句中的一致语法更明智.