(command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id:Id.BoolUnary_z child:{(DQ ($ Id.VSub_DollarName '$VBM'))}) ) terminator: (Token id:Id.Op_Semi val:';' span_id:25) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{(command)} {(-v)} {(VBoxManage)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:41) fd: -1 arg_word: {(/dev/null)} ) ] ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:44) ) ] action: [ (command.Simple words: [{(echo)} {(DQ ('VBoxManage not found!'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:55) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [ {(echo)} { (DQ ( ' Please ensure VirtualBox is installed and VBoxManage is on your system PATH.' ) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:65) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:69) arg_word: {(1)} ) ] spids: [31 46] ) ] ) (command.ShFunction name: check_version body: (command.BraceGroup children: [ (C {(local)} {(Id.Lit_VarLike 'MIN_MAJOR=') (4)}) (C {(local)} {(Id.Lit_VarLike 'MIN_MINOR=') (3)}) (C {(local)} {(Id.Lit_VarLike 'IFS=') (SQ (Token id:Id.Lit_Chars val:. span_id:102))}) (C {(local)} {(Id.Lit_VarLike 'version=') (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:110) command_list: (command.CommandList children: [(C {(VBoxManage)} {(--version)})] ) ) ) } ) (C {(local)} {(version_array)}) (command.Simple words: [{(read)} {(-a)} {(version_array)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_TLess val:'<<<' span_id:129) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$version'))} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (command.DBracket expr: (bool_expr.LogicalOr left: (bool_expr.Binary op_id: Id.BoolBinary_gt left: { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: version_array span_id: 145 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) ) ) ) } right: {(DQ ($ Id.VSub_DollarName '$MIN_MAJOR'))} ) right: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_ge left: { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: version_array span_id: 164 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 0)} ) ) ) ) } right: {(DQ ($ Id.VSub_DollarName '$MIN_MAJOR'))} ) right: (bool_expr.Binary op_id: Id.BoolBinary_ge left: { (DQ (braced_var_sub token: (Token id: Id.VSub_Name val: version_array span_id: 183 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) ) } right: {(DQ ($ Id.VSub_DollarName '$MIN_MINOR'))} ) ) ) ) ] negated: T ) ] action: [ (command.Simple words: [ {(echo)} { (DQ ('ERROR: VirtualBox ') ($ Id.VSub_DollarName '$version') (' is less than ') ($ Id.VSub_DollarName '$MIN_MAJOR') (.) ($ Id.VSub_DollarName '$MIN_MINOR') ('.x!') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:214) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [ {(echo)} { (DQ (' Only VirtualBox >= ') ($ Id.VSub_DollarName '$MIN_MAJOR') (.) ($ Id.VSub_DollarName '$MIN_MINOR') ('.x is officially supported.') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:228) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:232) arg_word: {(1)} ) ] spids: [137 199] ) ] ) ] ) ) (C {(check_version)}) (C {(unset)} {(-f)} {(check_version)}) (C {(export)} {(Id.Lit_VarLike 'VBM=') (VBoxManage)}) ] spids: [14 27] ) ] )