(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: <Id.Op_Semi _> ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [{<command>} {<-v>} {<VBoxManage>}] redirects: [ (redir.Redir op: <Id.Redir_GreatAnd '>&'> fd: -1 arg_word: {</dev/null>} ) ] ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(DQ <'VBoxManage not found!'>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> 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:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> 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 <.>)}) (C {<local>} {<Id.Lit_VarLike 'version='> (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<VBoxManage>} {<--version>})] ) ) ) } ) (C {<local>} {<version_array>}) (command.Simple words: [{<read>} {<-a>} {<version_array>}] redirects: [ (redir.Redir op: <Id.Redir_TLess '<<<'> 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: <Id.VSub_Name version_array> 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: <Id.VSub_Name version_array> 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: <Id.VSub_Name version_array> 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:<Id.Redir_GreatAnd '>&'> 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:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [137 199] ) ] ) ] ) ) (C {<check_version>}) (C {<unset>} {<-f>} {<check_version>}) (C {<export>} {<Id.Lit_VarLike 'VBM='> <VBoxManage>}) ] spids: [14 27] ) ] )