(command.CommandList
  children: [
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [{<echo>} {(SQ <'usage: shar file ...'>)}]
              redirects: [(redir.Redir op:<Id.Redir_GreatAnd '1>&'> fd:1 arg_word:{<2>})]
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<64>})
          ]
          spids: [97 110]
        )
      ]
    )
    (command.ForEach
      iter_name: i
      do_arg_iter: T
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} 
                          {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\('>)} {<-d>} {($ Id.VSub_DollarName '$i')} {<-o>} {<-r>} {($ Id.VSub_DollarName '$i')} 
                          {(word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\)'>)} {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$i') <' inaccessible or not exist'>)}]
                      redirects: [(redir.Redir op:<Id.Redir_GreatAnd '1>&'> fd:1 arg_word:{<2>})]
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<66>}
                    )
                  ]
                  spids: [140 163]
                )
              ]
            )
          ]
        )
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir.HereDoc
          op: <Id.Redir_DLess '<<'>
          fd: -1
          here_begin: {<EOF>}
          here_end_span_id: 208
          stdin_parts: [
            <'# This is a shell archive.  Save it in a file, remove anything before\n'>
            <'# this line, and then unpack it by entering '>
            <Id.Right_DoubleQuote '"'>
            <'sh file'>
            <Id.Right_DoubleQuote '"'>
            <'.  Note, it may\n'>
            <'# create directories; files and directories will be owned by you and\n'>
            <'# have default permissions.\n'>
            <'#\n'>
            <'# This archive contains:\n'>
            <'#\n'>
          ]
        )
      ]
    )
    (command.ForEach
      iter_name: i
      do_arg_iter: T
      body: (command.DoGroup children:[(C {<echo>} {(DQ <'#\t'> ($ Id.VSub_DollarName '$i'))})])
    )
    (C {<echo>} {(DQ <'#'>)})
    (command.ForEach
      iter_name: i
      do_arg_iter: T
      body: 
        (command.DoGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {<Id.Lit_LBracket '['>} {<-d>} {($ Id.VSub_DollarName '$i')} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  action: [
                    (C {<echo>} {(DQ <'echo c - '> ($ Id.VSub_DollarName '$i'))})
                    (C {<echo>} {(DQ <'mkdir -p '> ($ Id.VSub_DollarName '$i') <' > /dev/null 2>&1'>)})
                  ]
                  spids: [241 252]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:md5sum)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: <Id.Left_Backtick '`'>
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {<echo>} {<-n>} {($ Id.VSub_DollarName '$i')})
                                      (C {<md5>})
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          )
                        }
                      spids: [275]
                    )
                  ]
                )
                (C {<echo>} {(DQ <'echo x - '> ($ Id.VSub_DollarName '$i'))})
                (C {<echo>} 
                  {
                    (DQ <"sed 's/^X//' >"> ($ Id.VSub_DollarName '$i') <" << '"> 
                      ($ Id.VSub_DollarName '$md5sum') <"'">
                    )
                  }
                )
                (command.AndOr
                  ops: [Id.Op_DPipe]
                  children: [
                    (C {<sed>} {(SQ <'s/^/X/'>)} {($ Id.VSub_DollarName '$i')})
                    (command.ControlFlow token:<Id.ControlFlow_Exit exit>)
                  ]
                )
                (C {<echo>} {(DQ ($ Id.VSub_DollarName '$md5sum'))})
              ]
            )
          ]
        )
    )
    (C {<echo>} {<Id.ControlFlow_Exit exit>})
    (C {<echo>} {(DQ )})
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)