(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:tid) op:Equal rhs:{(DQ ('sftp glob'))} spids:[7])]
      spids: [7]
    )
    (AndOr
      children: [
        (C {(config_defined)} {(FILESYSTEM_NO_BACKSLASH)})
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:nobs)
              op: Equal
              rhs: {(DQ ('not supported on this platform'))}
              spids: [19]
            )
          ]
          spids: [19]
        )
      ]
      op_id: Op_DAmp
    )
    (FuncDef
      name: sftp_ls
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:target)
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [32]
                )
              ]
              spids: [32]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:errtag)
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [36]
                )
              ]
              spids: [36]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected)
                  op: Equal
                  rhs: {($ VSub_Number '$3')}
                  spids: [40]
                )
              ]
              spids: [40]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:unexpected)
                  op: Equal
                  rhs: {($ VSub_Number '$4')}
                  spids: [44]
                )
              ]
              spids: [44]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:skip)
                  op: Equal
                  rhs: {($ VSub_Number '$5')}
                  spids: [48]
                )
              ]
              spids: [48]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(test)} {(DQ (x) ($ VSub_Name '$skip'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ (x))}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(verbose)} 
                      {
                        (DQ ($ VSub_Name '$tid') (': ') ($ VSub_Name '$errtag') (' (skipped: ') 
                          ($ VSub_Name '$skip') (')')
                        )
                      }
                    )
                    (ControlFlow token:<ControlFlow_Return return>)
                  ]
                  spids: [-1 70]
                )
              ]
              spids: [-1 88]
            )
            (C {(verbose)} {(DQ ($ VSub_Name '$tid') (': ') ($ VSub_Name '$errtag'))})
            (Pipeline
              children: [
                (C {(printf)} {(DQ ('ls -l %s'))} {(DQ (${ VSub_Name target))})
                (SimpleCommand
                  words: [{(${ VSub_Name SFTP)} {(-b)} {(-)} {(-D)} {(${ VSub_Name SFTPSERVER)}]
                  redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[130])]
                )
                (SimpleCommand
                  words: [{(grep)} {(-v)} {(DQ ('^sftp>'))}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(${ VSub_Name RESULTS)}
                      spids: [145]
                    )
                  ]
                )
              ]
              negated: False
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-ne)} {(0)} {(Lit_Other ']')})
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [(C {(fail)} {(DQ ($ VSub_Name '$errtag') (' failed'))})]
                  spids: [-1 165]
                )
              ]
              spids: [-1 176]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(test)} {(DQ (x) ($ VSub_Name '$expected'))} {(KW_Bang '!') (Lit_Other '=')} 
                          {(DQ (x))}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (SimpleCommand
                                  words: [
                                    {(fgrep)}
                                    {(DQ ($ VSub_Name '$expected'))}
                                    {(${ VSub_Name RESULTS)}
                                  ]
                                  redirects: [
                                    (Redir
                                      op_id: Redir_Great
                                      fd: -1
                                      arg_word: {(/dev/null)}
                                      spids: [212]
                                    )
                                    (Redir
                                      op_id: Redir_GreatAnd
                                      fd: 2
                                      arg_word: {(1)}
                                      spids: [215]
                                    )
                                  ]
                                )
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          action: [(C {(Lit_Other ':')})]
                          spids: [-1 220]
                        )
                      ]
                      else_action: [
                        (C {(fail)} 
                          {
                            (DQ ($ VSub_Name '$expected') (' missing from ') ($ VSub_Name '$errtag') 
                              (' results')
                            )
                          }
                        )
                      ]
                      spids: [226 239]
                    )
                  ]
                  spids: [-1 197]
                )
              ]
              spids: [-1 242]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (AndOr
                          children: [
                            (C {(test)} {(DQ (x) ($ VSub_Name '$unexpected'))} 
                              {(KW_Bang '!') (Lit_Other '=')} {(DQ (x))}
                            )
                            (SimpleCommand
                              words: [
                                {(fgrep)}
                                {(DQ ($ VSub_Name '$unexpected'))}
                                {(${ VSub_Name RESULTS)}
                              ]
                              redirects: [
                                (Redir
                                  op_id: Redir_Great
                                  fd: -1
                                  arg_word: {(/dev/null)}
                                  spids: [275]
                                )
                                (Redir
                                  op_id: Redir_GreatAnd
                                  fd: 2
                                  arg_word: {(1)}
                                  spids: [278]
                                )
                              ]
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(fail)} 
                      {
                        (DQ ($ VSub_Name '$unexpected') (' present in ') ($ VSub_Name '$errtag') 
                          (' results')
                        )
                      }
                    )
                  ]
                  spids: [-1 283]
                )
              ]
              spids: [-1 296]
            )
            (C {(rm)} {(-f)} {(${ VSub_Name RESULTS)})
          ]
          spids: [29]
        )
      spids: [25 28]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BASE)
          op: Equal
          rhs: {(${ VSub_Name OBJ) (/glob)}
          spids: [310]
        )
      ]
      spids: [310]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:RESULTS)
          op: Equal
          rhs: {(${ VSub_Name OBJ) (/results)}
          spids: [316]
        )
      ]
      spids: [316]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DIR)
          op: Equal
          rhs: {(${ VSub_Name BASE) (/dir)}
          spids: [322]
        )
      ]
      spids: [322]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DATA)
          op: Equal
          rhs: {(${ VSub_Name DIR) (/file)}
          spids: [328]
        )
      ]
      spids: [328]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GLOB1)
          op: Equal
          rhs: {(DQ (${ VSub_Name DIR) ('/g-wild*'))}
          spids: [335]
        )
      ]
      spids: [335]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:GLOB2)
          op: Equal
          rhs: {(DQ (${ VSub_Name DIR) (/g-wildx))}
          spids: [343]
        )
      ]
      spids: [343]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:QUOTE)
          op: Equal
          rhs: {(DQ (${ VSub_Name DIR) (/g-quote) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>))}
          spids: [351]
        )
      ]
      spids: [351]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SLASH)
          op: Equal
          rhs: 
            {
              (DQ (${ VSub_Name DIR) (/g-sl) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (ash))
            }
          spids: [360]
        )
      ]
      spids: [360]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ESLASH)
          op: Equal
          rhs: {(DQ (${ VSub_Name DIR) (/g-slash) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>))}
          spids: [370]
        )
      ]
      spids: [370]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:QSLASH)
          op: Equal
          rhs: 
            {
              (DQ (${ VSub_Name DIR) (/g-qs) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
                (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
              )
            }
          spids: [379]
        )
      ]
      spids: [379]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SPACE)
          op: Equal
          rhs: {(DQ (${ VSub_Name DIR) ('/g-q space'))}
          spids: [389]
        )
      ]
      spids: [389]
    )
    (C {(rm)} {(-rf)} {(${ VSub_Name BASE)})
    (C {(mkdir)} {(-p)} {(${ VSub_Name DIR)})
    (C {(touch)} {(DQ (${ VSub_Name DATA))} {(DQ (${ VSub_Name GLOB1))} {(DQ (${ VSub_Name GLOB2))} 
      {(DQ (${ VSub_Name QUOTE))} {(DQ (${ VSub_Name SPACE))}
    )
    (AndOr
      children: [
        (C {(test)} {(DQ (x) ($ VSub_Name '$nobs'))} {(Lit_Other '=')} {(DQ (x))})
        (C {(touch)} {(DQ (${ VSub_Name QSLASH))} {(DQ (${ VSub_Name ESLASH))} {(DQ (${ VSub_Name SLASH))})
      ]
      op_id: Op_DAmp
    )
    (C {(sftp_ls)} {(DQ (${ VSub_Name DIR) ('/fil*'))} {(DQ ('file glob'))} {(DQ (${ VSub_Name DATA))} {(DQ )})
    (C {(sftp_ls)} {(DQ (${ VSub_Name BASE) ('/d*'))} {(DQ ('dir glob'))} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(basename)} {(${ VSub_Name DATA)})])
            left_token: <Left_Backtick '`'>
            spids: [521 527]
          )
        )
      } {(DQ )}
    )
    (C {(sftp_ls)} 
      {
        (DQ (${ VSub_Name DIR) (/g-wild) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ('*') 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
        )
      } {(DQ ('quoted glob'))} {(DQ ('g-wild*'))} {(DQ (g-wildx))}
    )
    (C {(sftp_ls)} {(DQ (${ VSub_Name DIR) (/g-wild) (EscapedLiteralPart token:<Lit_EscapedChar '\\*'>))} 
      {(DQ ('escaped glob'))} {(DQ ('g-wild*'))} {(DQ (g-wildx))}
    )
    (C {(sftp_ls)} 
      {
        (DQ (${ VSub_Name DIR) (/g-quote) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
        )
      } {(DQ ('escaped quote'))} {(DQ (g-quote) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>))} {(DQ )}
    )
    (C {(sftp_ls)} 
      {
        (DQ (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name DIR) (/g-quote) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
        )
      } {(DQ ('quoted quote'))} {(DQ (g-quote) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>))} {(DQ )}
    )
    (C {(sftp_ls)} 
      {
        (DQ ("'") (${ VSub_Name DIR) (/g-quote) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ("'"))
      } {(DQ ('single-quoted quote'))} {(DQ (g-quote) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>))} {(DQ )}
    )
    (C {(sftp_ls)} 
      {(DQ (${ VSub_Name DIR) (/g-q) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (' space'))} {(DQ ('escaped space'))} {(DQ ('g-q space'))} {(DQ )}
    )
    (C {(sftp_ls)} {(DQ ("'") (${ VSub_Name DIR) ("/g-q space'"))} {(DQ ('quoted space'))} 
      {(DQ ('g-q space'))} {(DQ )}
    )
    (C {(sftp_ls)} 
      {
        (DQ (${ VSub_Name DIR) (/g-sl) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (ash)
        )
      } {(DQ ('escaped slash'))} {(DQ (g-sl) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (ash))} {(DQ )} 
      {(DQ ($ VSub_Name '$nobs'))}
    )
    (C {(sftp_ls)} 
      {
        (DQ ("'") (${ VSub_Name DIR) (/g-sl) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ("ash'")
        )
      } {(DQ ('quoted slash'))} {(DQ (g-sl) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (ash))} {(DQ )} 
      {(DQ ($ VSub_Name '$nobs'))}
    )
    (C {(sftp_ls)} 
      {
        (DQ (${ VSub_Name DIR) (/g-slash) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>)
        )
      } {(DQ ('escaped slash at EOL'))} {(DQ (g-slash) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>))} {(DQ )} 
      {(DQ ($ VSub_Name '$nobs'))}
    )
    (C {(sftp_ls)} 
      {
        (DQ ("'") (${ VSub_Name DIR) (/g-slash) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) ("'")
        )
      } {(DQ ('quoted slash at EOL'))} {(DQ (g-slash) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>))} {(DQ )} 
      {(DQ ($ VSub_Name '$nobs'))}
    )
    (C {(sftp_ls)} 
      {
        (DQ (${ VSub_Name DIR) (/g-qs) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
        )
      } {(DQ ('escaped slash+quote'))} 
      {
        (DQ (g-qs) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
        )
      } {(DQ )} {(DQ ($ VSub_Name '$nobs'))}
    )
    (C {(sftp_ls)} 
      {
        (DQ ("'") (${ VSub_Name DIR) (/g-qs) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ("'")
        )
      } {(DQ ('quoted slash+quote'))} 
      {
        (DQ (g-qs) (EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>) 
          (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
        )
      } {(DQ )} {(DQ ($ VSub_Name '$nobs'))}
    )
    (C {(rm)} {(-rf)} {(${ VSub_Name BASE)})
  ]
)