(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)}) ] )