web-dev-qa-db-ja.com

ネストされたif / then / else ifはbashでどのように機能しますか?

Bashで構文はどのように機能しますか?これは、elseステートメントのCスタイルの擬似コードです。例えば:

If (condition)
    then
    echo "do this stuff"

elseif (condition)
    echo "do this stuff"

elseif (condition)
    echo "do this stuff"

    if(condition)
        then
        echo "this is nested inside"
    else
        echo "this is nested inside"

else
    echo "not nested"
19
Andrew Tsay

あなたの質問は、多くの文法に含まれる曖昧な他の曖昧さに関するものだと思います。 bashにはそのようなことはありません。すべてのifは、ifブロックの終わりを示すコンパニオンfiで区切る必要があります。

(他の構文エラーに加えて)この事実を考えると、あなたの例は有効なbashスクリプトではないことに気付くでしょう。エラーの一部を修正しようとすると、次のようなメッセージが表示される場合があります

if condition
    then
    echo "do this stuff"

Elif condition
    then
    echo "do this stuff"

Elif condition
    then
    echo "do this stuff"
    if condition
        then
        echo "this is nested inside"
    # this else _without_ any ambiguity binds to the if directly above as there was
    # no fi colosing the inner block
    else
        echo "this is nested inside"

    #   else
    #       echo "not nested"
    #  as given in your example is syntactically not correct !
    #  We have to close the  last if block first as there's only one else allowed in any block.
   fi
# now we can add your else ..
else
   echo "not nested"
# ... which should be followed by another fi
fi
40
mikyra