(command.CommandList children: [ (command.ShFunction name: usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (C {<echo>} {(DQ <'Usage: hal-fdi-validate [-f dtd] file [file ...]'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <-f>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ <foo> ($ Id.VSub_Number 2))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <foo>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DTD='> name:DTD) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number 2))} spids: [95] ) ] redirects: [] ) (C {<shift>} {<2>}) ] spids: [72 92] ) ] else_action: [(C {<usage>})] redirects: [] ) ] spids: [52 69] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DTD='> name:DTD) op: assign_op.Equal rhs: {(DQ <'/usr/share/lib/xml/dtd/fdi.dtd.1'>)} spids: [117] ) ] redirects: [] ) ] redirects: [] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<usage>})] spids: [125 138] ) ] else_action: [] redirects: [] ) (C {<xmllint>} {<--noout>} {<--dtdvalid>} {($ Id.VSub_DollarName DTD)} {($ Id.VSub_Star '*')}) ] )