(command.AndOr ops: [Op_DAmp] children: [ (command.FuncDef name: _crontab body: (command.BraceGroup children: [ (command.Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:cur spids:[13]) op: Equal spids: [13] ) (assign_pair lhs: (lhs_expr.LhsName name:prev spids:[15]) op: Equal spids: [15] ) (assign_pair lhs: (lhs_expr.LhsName name:words spids:[17]) op: Equal spids: [17] ) (assign_pair lhs: (lhs_expr.LhsName name:cword spids:[19]) op: Equal spids: [19] ) ] spids: [11] ) (command.AndOr ops: [Op_DPipe] children: [ (C {(_init_completion)}) (command.ControlFlow token:<ControlFlow_Return return>) ] ) (command.Case to_match: {($ VSub_DollarName '$prev')} arms: [ (case_arm pat_list: [{(-u)}] action: [ (C {(_allowed_users)}) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] spids: [37 38 49 16777215] ) ] spids: [30 34 52] ) (command.Assignment keyword: Assign_Local flags: [-A] pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:opts spids:[60]) op: Equal rhs: { (word_part.ArrayLiteralPart words: [ {(Lit_Other '[') (-u) (Lit_ArrayLhsClose ']=')} {(Lit_Other '[') (-l) (Lit_ArrayLhsClose ']=')} {(Lit_Other '[') (-r) (Lit_ArrayLhsClose ']=')} {(Lit_Other '[') (-e) (Lit_ArrayLhsClose ']=')} ] ) } spids: [60] ) ] spids: [56] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {($ VSub_DollarName '$OSTYPE')} right: {(Lit_Other '*') (linux) (Lit_Other '*')} ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsIndexedName name: opts index: (arith_expr.ArithUnary op_id: Node_UnaryMinus child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike i>) ) spids: [96] ) op: Equal rhs: (word.EmptyWord) spids: [96] ) ] spids: [96] ) ] ) (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.LogicalOr left: (bool_expr.BoolUnary op_id:BoolUnary_d child:{(/sys/fs/selinux)}) right: (bool_expr.BoolUnary op_id:BoolUnary_d child:{(/selinux)}) ) ) (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsIndexedName name: opts index: (arith_expr.ArithUnary op_id: Node_UnaryMinus child: (arith_expr.ArithVarRef token:<Lit_ArithVarLike s>) ) spids: [117] ) op: Equal rhs: (word.EmptyWord) spids: [117] ) ] spids: [117] ) ] ) (command.Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(lhs_expr.LhsName name:i spids:[125]) op:Equal spids:[125])] spids: [123] ) (command.ForExpr init: (arith_expr.BinaryAssign op_id: Arith_Equal left: (lhs_expr.LhsName name:i spids:[132]) right: (arith_expr.ArithWord w:{(Lit_Digits 0)}) ) cond: (arith_expr.ArithBinary op_id: Arith_Less left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike i>) right: (arith_expr.ArithBinary op_id: Arith_Minus left: (arith_expr.ArithWord w: { (word_part.BracedVarSub token: <VSub_Name words> prefix_op: VSub_Pound bracket_op: (bracket_op.WholeArray op_id:Lit_At) spids: [141 147] ) } ) right: (arith_expr.ArithWord w:{(Lit_Digits 1)}) ) ) update: (arith_expr.UnaryAssign op_id: Node_PostDPlus child: (lhs_expr.LhsName name:i spids:[152]) ) body: (command.DoGroup children: [ (command.AndOr ops: [Op_DAmp] children: [ (command.DBracket expr: (bool_expr.WordTest w: { (word_part.BracedVarSub token: <VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithVarRef token:<Lit_ArithVarLike i>) ) spids: [164 169] ) } ) ) (C {(unset)} { (DQ ('opts[') (word_part.BracedVarSub token: <VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithVarRef token:<Lit_ArithVarLike i>) ) spids: [179 184] ) (']') ) } ) ] ) (command.Case to_match: { (DQ (word_part.BracedVarSub token: <VSub_Name words> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithVarRef token:<Lit_ArithVarLike i>) ) spids: [192 197] ) ) } arms: [ (case_arm pat_list: [{(-l)}] action: [ (C {(unset)} {(SQ <'opts[-r]'>)} {(SQ <'opts[-e]'>)} {(SQ <'opts[-i]'>)} {(SQ <'opts[-s]'>)} ) ] spids: [203 204 226 16777215] ) (case_arm pat_list: [{(-e)}] action: [ (C {(unset)} {(SQ <'opts[-l]'>)} {(SQ <'opts[-r]'>)} {(SQ <'opts[-i]'>)}) ] spids: [229 230 248 16777215] ) (case_arm pat_list: [{(-r)}] action: [(C {(unset)} {(SQ <'opts[-l]'>)} {(SQ <'opts[-e]'>)})] spids: [251 252 266 16777215] ) (case_arm pat_list: [{(-u)}] action: [(C {(unset)} {(SQ <'opts[-i]'>)})] spids: [269 270 280 16777215] ) ] spids: [189 200 283] ) ] spids: [159 286] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: {(DQ ($ VSub_DollarName '$cur'))} right: {(-) (Lit_Other '*')} ) ) terminator: <Op_Semi ';'> ) ] action: [ (command.Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:COMPREPLY spids:[309]) op: Equal rhs: { (word_part.ArrayLiteralPart words: [ { (word_part.CommandSubPart command_list: (command.CommandList children: [ (C {(compgen)} {(-W)} {(SQ <'${!opts[@]}'>)} {(--)} {(DQ ($ VSub_DollarName '$cur'))} ) ] ) left_token: <Left_CommandSub '$('> spids: [312 328] ) } ] ) } spids: [309] ) ] spids: [309] ) (command.ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] spids: [16777215 306] ) ] spids: [16777215 338] ) (command.AndOr ops: [Op_DPipe] children: [ (command.DBracket expr: (bool_expr.BoolBinary op_id: BoolBinary_GlobDEqual left: { (DQ (word_part.BracedVarSub token: <VSub_Name words> bracket_op: (bracket_op.WholeArray op_id:Lit_At) spids: [349 354] ) ) } right: {(Lit_Other '*') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\ '>) (-) (Lit_Other '[') (lre) (Lit_Other ']') (Lit_Other '*') } ) ) (C {(_filedir)}) ] ) ] spids: [8] ) spids: [4 7] ) (C {(complete)} {(-F)} {(_crontab)} {(crontab)}) ] )