入れ子になった場合 - 「;;」を「esac」の直後に配置せずに、可能なコマンドの後に配置する必要があるのはなぜですか。

入れ子になった場合 - 「;;」を「esac」の直後に配置せずに、可能なコマンドの後に配置する必要があるのはなぜですか。

;;ネストされたケースの説明では、終了の説明が必要です。

どこかに文書化されていますか?

なぜ次のように動作しないのですか?

     #!/bin/ksh  
     ...    
     esac
     ;; 
     print "why here?"
     ...

しかし、その仕組みは次のとおりです。

#!/bin/ksh

var1="C" 
var2=0

case ${var1} in
  A) print "A"  
  ;;

  B) print "B"
  ;;

  C) print "C"

     case $var2 in
       0)
         print "A B"
         ;;
       1)
         print "C"           
         ;;
     esac
     print "why here?"
     ;;  

  *) print ${var1}
  ;;
esac

ベストアンサー1

;;別のケースブロック。それでは、シェルが他のものを見つけることを期待するものは何ですか?模様新しいケースブロックを開始するか、問い合わせの終わりをesac表示します。ではなく、無効です。caseprint somethingesac模様そのため、エラーが発生します。ひとりが欲しいなら基本/戻るケースブロック、使用*)または(*)

case $something in
  (foo) cmd1
        cmd2
        ;; # end of first block
  (bar) cmd3;; # end of second block
  (*)   cmd4 # default case block
esac # note that the ;; is not required before the esac.

ステートメントがネストcaseされたかどうかは関係ありません。

おすすめ記事