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

时间:2014-06-03 02:07:53

标签: bash

我正在教自己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

为什么forwhileuntil循环的末尾用done而不是rofelihw表示,以及litnu分别与if/ficase/esac结构一样? (或者,为什么它是if/fi而不是if/done

1 个答案:

答案 0 :(得分:7)

我怀疑它只是可读性,因为litnuesac更难阅读/发音。例如,请参阅this book,其中“end得分高于nigeb,原因显而易见。”

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