(command.CommandList children: [ (command.FuncDef name: getpassword body: (command.BraceGroup children: [ (command.WhileUntil keyword: <KW_Until until> cond: [ (command.Sentence child: (C {(Lit_LBracket '[')} {(DQ ($ VSub_DollarName '$password'))} {(Lit_Other '=')} {(DQ ($ VSub_DollarName '$rpassword'))} {(-a)} {(-n)} {(DQ ($ VSub_DollarName '$password'))} {(Lit_RBracket ']')} ) terminator: <Op_Semi ';'> ) ] body: (command.DoGroup children: [ (command.Sentence child: (C {(read)} {(-s)} {(-p)} {(DQ ("Enter a password for user '") ($ VSub_Number '$1') ("' : "))} {(password)} ) terminator: <Op_Semi ';'> ) (command.Simple words: [{(echo)}] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) (command.Sentence child: (C {(read)} {(-s)} {(-p)} {(DQ ("Reenter password for user '") ($ VSub_Number '$1') ("' : "))} {(rpassword)} ) terminator: <Op_Semi ';'> ) (command.Simple words: [{(echo)}] redirects: [(redir.Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) ] ) ) (C {(echo)} {(DQ ($ VSub_DollarName '$password'))}) ] ) ) (command.Assignment pairs: [ (assign_pair lhs: (lhs_expr.LhsName name:pw) op: Equal rhs: { (word_part.CommandSub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [ (C {(getpassword)} { (DQ (word_part.BracedVarSub token: <VSub_Number 1> suffix_op: (suffix_op.Unary op_id:VTest_ColonHyphen arg_word:{(blah)}) ) ) } ) ] ) ) } ) ] ) (C {(echo)} {(DQ ("password is '") ($ VSub_DollarName '$pw') ("'"))}) ] )