(command.CommandList
  children: [
    (command.ShFunction
      name_tok: <getpassword>
      name: getpassword
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.WhileUntil
              keyword: <Id.KW_Until until>
              cond: 
                (condition.Shell
                  commands: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <Id.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_DollarName password))}
                            {<Id.Lit_Equals '='>}
                            {(DQ ($ Id.VSub_DollarName rpassword))}
                            {<-a>}
                            {<-n>}
                            {(DQ ($ Id.VSub_DollarName password))}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <read>
                          more_env: []
                          words: [
                            {<read>}
                            {<-s>}
                            {<-p>}
                            {(DQ <'Enter a password for user \''> ($ Id.VSub_Number 1) <'\' : '>)}
                            {<password>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <read>
                          more_env: []
                          words: [
                            {<read>}
                            {<-s>}
                            {<-p>}
                            {(DQ <'Reenter password for user \''> ($ Id.VSub_Number 1) <'\' : '>)}
                            {<rpassword>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>}]
                      redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_DollarName password))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'pw='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'pw='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'pw='> name:pw)
          op: assign_op.Equal
          rhs: 
            {
              (CommandSub
                left_token: <Id.Left_Backtick '`'>
                child: 
                  (command.Simple
                    blame_tok: <getpassword>
                    more_env: []
                    words: [
                      {<getpassword>}
                      {
                        (DQ 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Number 1>
                            var_name: 1
                            suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:{<blah>})
                            right: <Id.Right_DollarBrace '}'>
                          )
                        )
                      }
                    ]
                    redirects: []
                    do_fork: T
                  )
                right: <Id.Backtick_Right '`'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <echo>
      more_env: []
      words: [{<echo>} {(DQ <'password is \''> ($ Id.VSub_DollarName pw) <'\''>)}]
      redirects: []
      do_fork: T
    )
  ]
)