$ help
GNU bash, version 5.2.37(1)-release (x86_64--netbsd)
These shell commands are defined internally.  Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.

A star (*) next to a name means that the command is disabled.

job_spec [&]                     history [-c] [-d offset] [n] >
(( expression ))                 if COMMANDS; then COMMANDS; [>
. filename [arguments]           jobs [-lnprs] [jobspec ...] o>
:                                kill [-s sigspec | -n signum >
[ arg... ]                       let arg [arg ...]
[[ expression ]]                 local [option] name[=value] .>
alias [-p] [name[=value] ... ]>  logout [n]
bg [job_spec ...]                mapfile [-d delim] [-n count]>
bind [-lpsvPSVX] [-m keymap] [>  popd [-n] [+N | -N]
break [n]                        printf [-v var] format [argum>
builtin [shell-builtin [arg ..>  pushd [-n] [+N | -N | dir]
caller [expr]                    pwd [-LP]
case WORD in [PATTERN [| PATTE>  read [-ers] [-a array] [-d de>
cd [-L|[-P [-e]] [-@]] [dir]     readarray [-d delim] [-n coun>
command [-pVv] command [arg ..>  readonly [-aAf] [name[=value]>
compgen [-abcdefgjksuv] [-o op>  return [n]
complete [-abcdefgjksuv] [-pr]>  select NAME [in WORDS ... ;] >
compopt [-o|+o option] [-DEI] >  set [-abefhkmnptuvxBCEHPT] [->
continue [n]                     shift [n]
coproc [NAME] command [redirec>  shopt [-pqsu] [-o] [optname .>
declare [-aAfFgiIlnrtux] [name>  source filename [arguments]
dirs [-clpv] [+N] [-N]           suspend [-f]
disown [-h] [-ar] [jobspec ...>  test [expr]
echo [-neE] [arg ...]            time [-p] pipeline
enable [-a] [-dnps] [-f filena>  times
eval [arg ...]                   trap [-lp] [[arg] signal_spec>
exec [-cl] [-a name] [command >  true
exit [n]                         type [-afptP] name [name ...]>
export [-fn] [name[=value] ...>  typeset [-aAfFgiIlnrtux] name>
false                            ulimit [-SHabcdefiklmnpqrstuv>
fc [-e ename] [-lnr] [first] [>  umask [-p] [-S] [mode]
fg [job_spec]                    unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do >  unset [-f] [-v] [-n] [name ..>
for (( exp1; exp2; exp3 )); do>  until COMMANDS; do COMMANDS-2>
function name { COMMANDS ; } o>  variables - Names and meaning>
getopts optstring name [arg ..>  wait [-fn] [-p var] [id ...]
hash [-lr] [-p pathname] [-dt]>  while COMMANDS; do COMMANDS-2>
help [-dms] [pattern ...]        { COMMANDS ; }

$ help test
test: test [expr]
   Evaluate conditional expression.

   Exits with a status of 0 (true) or 1 (false) depending on
   the evaluation of EXPR.  Expressions may be unary or binary.  Unary
   expressions are often used to examine the status of a file.  There
   are string operators and numeric comparison operators as well.

   The behavior of test depends on the number of arguments.  Read the
   bash manual page for the complete specification.

   File operators:

     -a FILE        True if file exists.
     -b FILE        True if file is block special.
     -c FILE        True if file is character special.
     -d FILE        True if file is a directory.
     -e FILE        True if file exists.
     -f FILE        True if file exists and is a regular file.
     -g FILE        True if file is set-group-id.
     -h FILE        True if file is a symbolic link.
     -L FILE        True if file is a symbolic link.
     -k FILE        True if file has its `sticky' bit set.
     -p FILE        True if file is a named pipe.
     -r FILE        True if file is readable by you.
     -s FILE        True if file exists and is not empty.
     -S FILE        True if file is a socket.
     -t FD          True if FD is opened on a terminal.
     -u FILE        True if the file is set-user-id.
     -w FILE        True if the file is writable by you.
     -x FILE        True if the file is executable by you.
     -O FILE        True if the file is effectively owned by you.
     -G FILE        True if the file is effectively owned by your group.
     -N FILE        True if the file has been modified since it was last read.

     FILE1 -nt FILE2  True if file1 is newer than file2 (according to
                      modification date).

     FILE1 -ot FILE2  True if file1 is older than file2.

     FILE1 -ef FILE2  True if file1 is a hard link to file2.

   String operators:

     -z STRING      True if string is empty.

     -n STRING
        STRING      True if string is not empty.

     STRING1 = STRING2
                    True if the strings are equal.
     STRING1 != STRING2
                    True if the strings are not equal.
     STRING1 < STRING2
                    True if STRING1 sorts before STRING2 lexicographically.
     STRING1 > STRING2
                    True if STRING1 sorts after STRING2 lexicographically.

   Other operators:

     -o OPTION      True if the shell option OPTION is enabled.
     -v VAR         True if the shell variable VAR is set.
     -R VAR         True if the shell variable VAR is set and is a name
                    reference.
     ! EXPR         True if expr is false.
     EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
     EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.

     arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,
                    -lt, -le, -gt, or -ge.

   Arithmetic binary operators return true if ARG1 is equal, not-equal,
   less-than, less-than-or-equal, greater-than, or greater-than-or-equal
   than ARG2.

   Exit Status:
   Returns success if EXPR evaluates to true; fails if EXPR evaluates to
   false or an invalid argument is given.

$ help set
set: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
   Set or unset values of shell options and positional parameters.

   Change the value of shell attributes and positional parameters, or
   display the names and values of shell variables.

   Options:
     -a  Mark variables which are modified or created for export.
     -b  Notify of job termination immediately.
     -e  Exit immediately if a command exits with a non-zero status.
     -f  Disable file name generation (globbing).
     -h  Remember the location of commands as they are looked up.
     -k  All assignment arguments are placed in the environment for a
         command, not just those that precede the command name.
     -m  Job control is enabled.
     -n  Read commands but do not execute them.
     -o option-name
         Set the variable corresponding to option-name:
             allexport    same as -a
             braceexpand  same as -B
             emacs        use an emacs-style line editing interface
             errexit      same as -e
             errtrace     same as -E
             functrace    same as -T
             hashall      same as -h
             histexpand   same as -H
             history      enable command history
             ignoreeof    the shell will not exit upon reading EOF
             interactive-comments
                          allow comments to appear in interactive commands
             keyword      same as -k
             monitor      same as -m
             noclobber    same as -C
             noexec       same as -n
             noglob       same as -f
             nolog        currently accepted but ignored
             notify       same as -b
             nounset      same as -u
             onecmd       same as -t
             physical     same as -P
             pipefail     the return value of a pipeline is the status of
                          the last command to exit with a non-zero status,
                          or zero if no command exited with a non-zero status
             posix        change the behavior of bash where the default
                          operation differs from the Posix standard to
                          match the standard
             privileged   same as -p
             verbose      same as -v
             vi           use a vi-style line editing interface
             xtrace       same as -x
     -p  Turned on whenever the real and effective user ids do not match.
         Disables processing of the $ENV file and importing of shell
         functions.  Turning this option off causes the effective uid and
         gid to be set to the real uid and gid.
     -t  Exit after reading and executing one command.
     -u  Treat unset variables as an error when substituting.
     -v  Print shell input lines as they are read.
     -x  Print commands and their arguments as they are executed.
     -B  the shell will perform brace expansion
     -C  If set, disallow existing regular files to be overwritten
         by redirection of output.
     -E  If set, the ERR trap is inherited by shell functions.
     -H  Enable ! style history substitution.  This flag is on
         by default when the shell is interactive.
     -P  If set, do not resolve symbolic links when executing commands
         such as cd which change the current directory.
     -T  If set, the DEBUG and RETURN traps are inherited by shell functions.
     --  Assign any remaining arguments to the positional parameters.
         If there are no remaining arguments, the positional parameters
         are unset.
     -   Assign any remaining arguments to the positional parameters.
         The -x and -v options are turned off.

   Using + rather than - causes these flags to be turned off.  The
   flags can also be used upon invocation of the shell.  The current
   set of flags may be found in $-.  The remaining n ARGs are positional
   parameters and are assigned, in order, to $1, $2, .. $n.  If no
   ARGs are given, all shell variables are printed.

   Exit Status:
   Returns success unless an invalid option is given.

$ help let
let: let arg [arg ...]
   Evaluate arithmetic expressions.

   Evaluate each ARG as an arithmetic expression.  Evaluation is done in
   fixed-width integers with no check for overflow, though division by 0
   is trapped and flagged as an error.  The following list of operators is
   grouped into levels of equal-precedence operators.  The levels are listed
   in order of decreasing precedence.

       id++, id--      variable post-increment, post-decrement
       ++id, --id      variable pre-increment, pre-decrement
       -, +            unary minus, plus
       !, ~            logical and bitwise negation
       **              exponentiation
       *, /, %         multiplication, division, remainder
       +, -            addition, subtraction
       <<, >>          left and right bitwise shifts
       <=, >=, <, >    comparison
       ==, !=          equality, inequality
       &               bitwise AND
       ^               bitwise XOR
       |               bitwise OR
       &&              logical AND
       ||              logical OR
       expr ? expr : expr
                       conditional operator
       =, *=, /=, %=,
       +=, -=, <<=, >>=,
       &=, ^=, |=      assignment

   Shell variables are allowed as operands.  The name of the variable
   is replaced by its value (coerced to a fixed-width integer) within
   an expression.  The variable need not have its integer attribute
   turned on to be used in an expression.

   Operators are evaluated in order of precedence.  Sub-expressions in
   parentheses are evaluated first and may override the precedence
   rules above.

   Exit Status:
   If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.