(CommandList children: [ (FuncDef name: is-shell body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:path) op: Equal rhs: {($ VSub_Number '$1')} spids: [25] ) ] spids: [23] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:shebang) op:Equal spids:[31])] spids: [29] ) (SimpleCommand words: [{(read)} {(shebang)}] redirects: [(Redir op_id:Redir_Less fd:-1 arg_word:{($ VSub_Name '$path')} spids:[38])] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:shebang) op: Equal rhs: { (BracedVarSub token: <VSub_Name shebang> suffix_op: (PatSub pat: {(' ')} replace: {} do_all: True do_prefix: False do_suffix: False ) spids: [47 53] ) } spids: [46] ) ] spids: [46] ) (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_Name '$shebang')} right: {(Lit_Other '*') (sh)} ) ) ] spids: [20] ) spids: [16 19] ) (FuncDef name: unittest body: (BraceGroup children: [ (ForEach iter_name: file iter_words: [{(bin/oil.py)} {(configure)} {(install)}] do_arg_iter: False body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(is-shell)} {($ VSub_Name '$file')}) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(YES)} {($ VSub_Name '$file')})] spids: [-1 103] ) ] else_action: [(C {(echo)} {(NO)} {($ VSub_Name '$file')})] spids: [113 123] ) ] spids: [93 126] ) spids: [85 91] ) ] spids: [77] ) spids: [73 76] ) (C {(DQ ($ VSub_At '$@'))}) ] )