(command.CommandList
  children: [
    (C {(Id.Lit_Other ':')})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:53)
                command_list: (command.CommandList children:[(C {(uname)})])
              )
            }
          spids: [52]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OSREL)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:60)
                command_list: (command.CommandList children:[(C {(uname)} {(-r)})])
              )
            }
          spids: [59]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OSMAJOR)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:69)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Sentence
                        child: 
                          (command.ShAssignment
                            pairs: [
                              (assign_pair
                                lhs: (sh_lhs_expr.Name name:IFS)
                                op: assign_op.Equal
                                rhs: {(.)}
                                spids: [72]
                              )
                            ]
                          )
                        terminator: (Token id:Id.Op_Semi val:';' span_id:74)
                      )
                      (command.Sentence
                        child: (C {(Id.KW_Set set)} {($ Id.VSub_DollarName '$OSREL')})
                        terminator: (Token id:Id.Op_Semi val:';' span_id:79)
                      )
                      (C {(echo)} {($ Id.VSub_Number '$1')})
                    ]
                  )
              )
            }
          spids: [68]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:machine)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_Backtick val:'`' span_id:87)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.AndOr
                        ops: [Id.Op_DPipe]
                        children: [
                          (command.Simple
                            words: [{(uname)} {(-p)}]
                            redirects: [
                              (redir.Redir
                                op: (Token id:Id.Redir_Great val:'2>' span_id:94)
                                fd: 2
                                arg_word: {(/dev/null)}
                              )
                            ]
                          )
                          (C {(uname)} {(-m)})
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [86]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MACHINE)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [104]
        )
      ]
    )
    (command.Case
      to_match: {(DQ ($ Id.VSub_DollarName '$machine'))}
      arms: [
        (case_arm
          pat_list: [
            {(unknown)}
            {(Id.Lit_Star '*') (Id.Lit_LBracket '[') (Id.KW_Bang '!') (A-Za-z0-9_-) 
              (Id.Lit_RBracket ']') (Id.Lit_Star '*')
            }
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:machine)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:133)
                        command_list: (command.CommandList children:[(C {(uname)} {(-m)})])
                      )
                    }
                  spids: [132]
                )
              ]
            )
          ]
          spids: [121 129 142 -1]
        )
      ]
    )
    (command.ShFunction
      name: Which
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_dirs)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:169)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Sentence
                                child: 
                                  (command.ShAssignment
                                    pairs: [
                                      (assign_pair
                                        lhs: (sh_lhs_expr.Name name:IFS)
                                        op: assign_op.Equal
                                        rhs: {(Id.Lit_Other ':')}
                                        spids: [172]
                                      )
                                    ]
                                  )
                                terminator: (Token id:Id.Op_Semi val:';' span_id:174)
                              )
                              (C {(echo)} 
                                {
                                  (braced_var_sub
                                    token: (Token id:Id.VSub_Number val:2 span_id:179)
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op_id: Id.VTest_ColonHyphen
                                        arg_word: {($ Id.VSub_DollarName '$PATH')}
                                      )
                                  )
                                }
                              )
                            ]
                          )
                      )
                    }
                  spids: [168]
                )
              ]
            )
            (command.ForEach
              iter_name: d
              iter_words: [{($ Id.VSub_DollarName '$_dirs')}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(test)} {(-x)} {($ Id.VSub_DollarName '$d') (/) ($ Id.VSub_Number '$1')})
                        (command.BraceGroup
                          children: [
                            (command.Sentence
                              child: 
                                (C {(echo)} {($ Id.VSub_DollarName '$d') (/) ($ Id.VSub_Number '$1')})
                              terminator: (Token id:Id.Op_Semi val:';' span_id:215)
                            )
                            (command.Sentence
                              child: 
                                (command.ControlFlow
                                  token: (Token id:Id.ControlFlow_Break val:break span_id:217)
                                )
                              terminator: (Token id:Id.Op_Semi val:';' span_id:218)
                            )
                          ]
                        )
                      ]
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.Case
      to_match: {($ Id.VSub_DollarName '$OS')}
      arms: [
        (case_arm
          pat_list: [{(OpenBSD)}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MACHINE)
                  op: assign_op.Equal
                  rhs: 
                    {($ Id.VSub_DollarName '$OS') ($ Id.VSub_DollarName '$OSMAJOR') (.) 
                      ($ Id.VSub_DollarName '$machine')
                    }
                  spids: [238]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:arch)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:246)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(Which)} {(arch)} 
                                {(/usr/bin) (Id.Lit_Other ':') (/usr/ucb) (Id.Lit_Other ':') 
                                  ($ Id.VSub_DollarName '$PATH')
                                }
                              )
                            ]
                          )
                      )
                    }
                  spids: [245]
                )
              ]
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:262)
                            command_list: 
                              (command.CommandList
                                children: [(C {($ Id.VSub_DollarName '$arch')} {(-s)})]
                              )
                          )
                        }
                      spids: [261]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:269)
            )
          ]
          spids: [234 235 272 -1]
        )
        (case_arm
          pat_list: [{(Bitrig)}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MACHINE)
                  op: assign_op.Equal
                  rhs: 
                    {($ Id.VSub_DollarName '$OS') ($ Id.VSub_DollarName '$OSMAJOR') (.) 
                      ($ Id.VSub_DollarName '$machine')
                    }
                  spids: [278]
                )
              ]
            )
            (command.Sentence
              child: 
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:286)
                            command_list: (command.CommandList children:[(C {(uname)} {(-m)})])
                          )
                        }
                      spids: [285]
                    )
                  ]
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:293)
            )
          ]
          spids: [274 275 296 -1]
        )
        (case_arm
          pat_list: [{(Id.Lit_Star '*') (BSD)}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MACHINE)
                  op: assign_op.Equal
                  rhs: 
                    {($ Id.VSub_DollarName '$OS') ($ Id.VSub_DollarName '$OSMAJOR') (.) 
                      ($ Id.VSub_DollarName '$machine')
                    }
                  spids: [303]
                )
              ]
            )
          ]
          spids: [298 300 310 -1]
        )
        (case_arm
          pat_list: [{(SunOS)}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:arch)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:317)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(Which)} {(arch)} 
                                {(/usr/bin) (Id.Lit_Other ':') (/usr/ucb) (Id.Lit_Other ':') 
                                  ($ Id.VSub_DollarName '$PATH')
                                }
                              )
                            ]
                          )
                      )
                    }
                  spids: [316]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(test)} {(DQ ($ Id.VSub_DollarName '$arch'))})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:machine_arch)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_Backtick val:'`' span_id:341)
                            command_list: 
                              (command.CommandList
                                children: [(C {($ Id.VSub_DollarName '$arch')})]
                              )
                          )
                        }
                      spids: [340]
                    )
                  ]
                )
              ]
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$OSREL'))}
              arms: [
                (case_arm
                  pat_list: [{(4.0) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$machine_arch')}
                          spids: [362]
                        )
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:MACHINE)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$machine_arch')}
                          spids: [365]
                        )
                      ]
                    )
                  ]
                  spids: [358 360 367 -1]
                )
                (case_arm
                  pat_list: [{(4) (Id.Lit_Star '*')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName '$machine_arch')}
                          spids: [374]
                        )
                      ]
                    )
                  ]
                  spids: [370 372 376 -1]
                )
              ]
            )
          ]
          spids: [312 313 382 -1]
        )
        (case_arm
          pat_list: [{(HP-UX)}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:389)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Sentence
                                child: 
                                  (command.ShAssignment
                                    pairs: [
                                      (assign_pair
                                        lhs: (sh_lhs_expr.Name name:IFS)
                                        op: assign_op.Equal
                                        rhs: {(DQ (/-.))}
                                        spids: [392]
                                      )
                                    ]
                                  )
                                terminator: (Token id:Id.Op_Semi val:';' span_id:396)
                              )
                              (command.Sentence
                                child: (C {(Id.KW_Set set)} {($ Id.VSub_DollarName '$machine')})
                                terminator: (Token id:Id.Op_Semi val:';' span_id:401)
                              )
                              (C {(echo)} {($ Id.VSub_Number '$1')})
                            ]
                          )
                      )
                    }
                  spids: [388]
                )
              ]
            )
          ]
          spids: [384 385 409 -1]
        )
        (case_arm
          pat_list: [{(Interix)}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MACHINE)
                  op: assign_op.Equal
                  rhs: {(i386)}
                  spids: [415]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
                  op: assign_op.Equal
                  rhs: {(i386)}
                  spids: [419]
                )
              ]
            )
          ]
          spids: [411 412 423 -1]
        )
        (case_arm
          pat_list: [{(UnixWare)}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OSREL)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:430)
                        command_list: (command.CommandList children:[(C {(uname)} {(-v)})])
                      )
                    }
                  spids: [429]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:OSMAJOR)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:440)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Sentence
                                child: 
                                  (command.ShAssignment
                                    pairs: [
                                      (assign_pair
                                        lhs: (sh_lhs_expr.Name name:IFS)
                                        op: assign_op.Equal
                                        rhs: {(.)}
                                        spids: [443]
                                      )
                                    ]
                                  )
                                terminator: (Token id:Id.Op_Semi val:';' span_id:445)
                              )
                              (command.Sentence
                                child: (C {(Id.KW_Set set)} {($ Id.VSub_DollarName '$OSREL')})
                                terminator: (Token id:Id.Op_Semi val:';' span_id:450)
                              )
                              (C {(echo)} {($ Id.VSub_Number '$1')})
                            ]
                          )
                      )
                    }
                  spids: [439]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:459)
                        command_list: (command.CommandList children:[(C {(uname)} {(-m)})])
                      )
                    }
                  spids: [458]
                )
              ]
            )
          ]
          spids: [425 426 468 -1]
        )
        (case_arm
          pat_list: [{(Linux)}]
          action: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$machine'))}
              arms: [
                (case_arm
                  pat_list: [{(i) (Id.Lit_QMark '?') (86)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
                          op: assign_op.Equal
                          rhs: {(i386)}
                          spids: [488]
                        )
                      ]
                    )
                  ]
                  spids: [483 486 490 -1]
                )
              ]
            )
          ]
          spids: [470 471 498 -1]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MACHINE)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:MACHINE span_id:505)
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {($ Id.VSub_DollarName '$OS') ($ Id.VSub_DollarName '$OSMAJOR')}
                  )
              )
            }
          spids: [503]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MACHINE_ARCH)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: (Token id:Id.VSub_Name val:MACHINE_ARCH span_id:513)
                suffix_op: 
                  (suffix_op.Unary
                    op_id: Id.VTest_ColonHyphen
                    arg_word: {($ Id.VSub_DollarName '$machine')}
                  )
              )
            }
          spids: [511]
        )
      ]
    )
    (command.Pipeline
      children: [
        (command.Subshell
          command_list: 
            (command.CommandList
              children: [
                (command.Case
                  to_match: {(DQ ($ Id.VSub_Number '$0'))}
                  arms: [
                    (case_arm
                      pat_list: [{(arch) (Id.Lit_Star '*')}]
                      action: [(C {(echo)} {($ Id.VSub_DollarName '$MACHINE_ARCH')})]
                      spids: [529 531 536 -1]
                    )
                    (case_arm
                      pat_list: [{(Id.Lit_Star '*')}]
                      action: [
                        (command.Case
                          to_match: {(DQ ($ Id.VSub_Number '$1'))}
                          arms: [
                            (case_arm
                              pat_list: [{(DQ )}]
                              action: [(C {(echo)} {($ Id.VSub_DollarName '$MACHINE')})]
                              spids: [551 553 558 -1]
                            )
                            (case_arm
                              pat_list: [{(Id.Lit_Star '*')}]
                              action: [(C {(echo)} {($ Id.VSub_DollarName '$MACHINE_ARCH')})]
                              spids: [561 562 567 -1]
                            )
                          ]
                        )
                      ]
                      spids: [538 539 573 -1]
                    )
                  ]
                )
              ]
            )
        )
        (C {(tr)} {(ABCDEFGHIJKLMNOPQRSTUVWXYZ)} {(abcdefghijklmnopqrstuvwxyz)})
      ]
      negated: F
    )
  ]
)