(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: 16777215 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:T do_prefix:F do_suffix:F) 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: F 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: [16777215 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 '$@'))}) ] )