(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:common_objpfx)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$1')}
          spids: [59]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:objpfx)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$2')}
          spids: [62]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_program_prefix)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$3')}
          spids: [65]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:charset)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$4')}
          spids: [68]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:charmap)
          op: assign_op.Equal
          rhs: {($ Id.VSub_Number '$5')}
          spids: [71]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LC_ALL)
          op: assign_op.Equal
          rhs: {<C>}
          spids: [78]
        )
      ]
    )
    (C {<export>} {<LC_ALL>})
    (C {<Id.KW_Set set>} {<-e>})
    (command.Simple
      words: [
        {<'./tst-table-charmap.sh'>}
        {
          (braced_var_sub
            token: <Id.VSub_Name charmap>
            suffix_op: 
              (suffix_op.Unary
                op_id: Id.VTest_ColonHyphen
                arg_word: {($ Id.VSub_DollarName '$charset')}
              )
          )
        }
      ]
      redirects: [
        (redir
          op: <Id.Redir_Less '<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            {<'../localedata/charmaps/'> 
              (braced_var_sub
                token: <Id.VSub_Name charmap>
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {($ Id.VSub_DollarName '$charset')}
                  )
              )
            }
        )
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>}
        )
      ]
      do_fork: T
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {<test>} {(${ Id.VSub_Name charset)} {<Id.Lit_Equals '='>} {<GB18030>})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Simple
              words: [{<grep>} {(SQ <'0x....$'>)}]
              redirects: [
                (redir
                  op: <Id.Redir_Less '<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>}
                )
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.truncated.table>}
                )
              ]
              do_fork: T
            )
            (C {<mv>} {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.truncated.table>} 
              {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>}
            )
          ]
          spids: [132 145]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:precomposed)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name charset) <.precomposed>}
          spids: [205]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {<test>} {(${ Id.VSub_Name charset)} {<Id.Lit_Equals '='>} {<EUC-TW>})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:irreversible)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.irreversible>}
                  spids: [231]
                )
              ]
            )
            (command.Subshell
              child: 
                (command.CommandList
                  children: [
                    (C {<grep>} {(SQ <'^0x8EA1'>)} 
                      {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>}
                    )
                    (C {<cat>} {(${ Id.VSub_Name charset) <.irreversible>})
                  ]
                )
              redirects: [
                (redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(${ Id.VSub_Name irreversible)}
                )
              ]
            )
          ]
          spids: [215 228]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:irreversible)
              op: assign_op.Equal
              rhs: {(${ Id.VSub_Name charset) <.irreversible>}
              spids: [278]
            )
          ]
        )
      ]
    )
    (command.Simple
      words: [
        {(${ Id.VSub_Name test_program_prefix)}
        {(${ Id.VSub_Name objpfx) <tst-table-from>}
        {(${ Id.VSub_Name charset)}
      ]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.table>}
        )
      ]
      do_fork: T
    )
    (command.Pipeline
      children: [
        (C {(${ Id.VSub_Name test_program_prefix)} {(${ Id.VSub_Name objpfx) <tst-table-to>} 
          {(${ Id.VSub_Name charset)}
        )
        (command.Simple
          words: [{<sort>}]
          redirects: [
            (redir
              op: <Id.Redir_Great '>'>
              loc: (redir_loc.Fd fd:1)
              arg: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.inverse.table>}
            )
          ]
          do_fork: T
        )
      ]
      negated: F
    )
    (command.Pipeline
      children: [
        (C {<diff>} {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>} 
          {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.inverse.table>}
        )
        (C {<grep>} {(SQ <'^[<>]'>)})
        (command.Simple
          words: [{<sed>} {<-e>} {(SQ <'s,^. ,,'>)}]
          redirects: [
            (redir
              op: <Id.Redir_Great '>'>
              loc: (redir_loc.Fd fd:1)
              arg: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.irreversible.table>}
            )
          ]
          do_fork: T
        )
      ]
      negated: F
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {<test>} {<-f>} {(${ Id.VSub_Name precomposed)})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Pipeline
              children: [
                (C {<cat>} {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.table>} 
                  {(${ Id.VSub_Name precomposed)}
                )
                (C {<sort>})
                (command.Simple
                  words: [{<uniq>} {<-u>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.tmp.table>}
                    )
                  ]
                  do_fork: T
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<cmp>} {<-s>} 
                  {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>} {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.tmp.table>}
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          ]
          spids: [414 425]
        )
      ]
      else_action: [
        (command.AndOr
          ops: [Id.Op_DPipe]
          children: [
            (C {<cmp>} {<-s>} 
              {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>} {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.table>}
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {<test>} {<-f>} {(${ Id.VSub_Name irreversible)})
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.Pipeline
              children: [
                (C {<cat>} {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>} 
                  {(${ Id.VSub_Name irreversible)}
                )
                (C {<sort>})
                (command.Simple
                  words: [{<uniq>} {<-u>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.tmp.table>}
                    )
                  ]
                  do_fork: T
                )
              ]
              negated: F
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {<cmp>} {<-s>} 
                  {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.tmp.table>} {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.inverse.table>}
                )
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
          ]
          spids: [534 545]
        )
      ]
      else_action: [
        (command.AndOr
          ops: [Id.Op_DPipe]
          children: [
            (C {<cmp>} {<-s>} 
              {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.charmap.table>} {(${ Id.VSub_Name objpfx) <tst-> (${ Id.VSub_Name charset) <.inverse.table>}
            )
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
      ]
    )
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)