†† typeset [ ±ACHSfblmnprstux ] [ ±EFLRXZi[n] ]   [ +-M  [ mapname ] ] [ -T  [ tname=(assign_list) ] ] [ -h str ] [ -a [type] ] [ vname[=value ] ] ... Sets attributes and values for shell variables and functions. When invoked inside a function defined with the function name syntax, a new instance of the variable vname is created, and the variable's value and type are restored when the function completes.  The following list of attributes may be specified: -A     Declares vname to be an associative array.  Subscripts are strings rather than arithmetic expressions. -C     causes each vname to be a compound variable.  value names a compound variable it is copied into vname.  Otherwise, it unsets each vname. -a     Declares vname to be an indexed array.  If type is specified, it must be the name of an enumeration type created with the enum command and it allows enumeration constants to be used as subscripts. -E     Declares vname to be a double precision floating point number.  If n is non-zero, it defines the number of significant figures that are used when expanding vname. Otherwise, ten significant figures will be used. -F     Declares vname to be a double precision floating point number.  If n is non-zero, it defines the number of places after the decimal point that are used when expanding vname. Otherwise ten places after the decimal point will be used. -H     This option provides UNIX to host-name file mapping on non- UNIX machines. -L     Left justify and remove leading blanks from value.  If n is non-zero, it defines the width of the field, otherwise it is determined by the width of the value of first assignment.  When the variable is assigned to, it is filled on the right with blanks or truncated, if necessary, to fit into the field.  The -R option is turned off. -M     Use the character mapping mapping defined by wctrans(3). such as tolower and toupper when assigning a value to each of the specified operands.  When mapping is specified and there are not operands, all variables that use this mapping are written to standard output.  When mapping is omitted and there are no operands, all mapped variables are written to standard output. -R     Right justify and fill with leading blanks.  If n is non- zero, it defines the width of the field, otherwise it is determined by the width of the value of first assignment. The field is left filled with blanks or truncated from the end if the variable is reassigned.  The -L option is turned off. -S     When used within the assign_list of a type definition, it causes the specified sub-variable to be shared by all instances of the type.  When used inside a function defined with the function reserved word, the specified variables will have function static scope.  Otherwise, the variable is unset prior to processing the assignment list. -T     If followed by tname, it creates a type named by tname using the compound assignment assign_list to tname. Otherwise, it writes all the type definitions to standard output. -X     Declares vname to be a double precision floating point number and expands using the %a format of ISO-C99.  If n is non-zero, it defines the number of hex digits after the radix point that is used when expanding vname.  The default is 10. -Z     Right justify and fill with leading zeros if the first non- blank character is a digit and the -L option has not been set.  Remove leading zeros if the -L option is also set. If n is non-zero, it defines the width of the field, otherwise it is determined by the width of the value of first assignment. -f     The names refer to function names rather than variable names.  No assignments can be made and the only other valid options are -S, -t, -u and -x.  The -S can be used with discipline functions defined in a type to indicate that the function is static.  For a static function, the same method will be used by all instances of that type no matter which instance references it.  In addition, it can only use value of variables from the original type definition.  These discipline functions cannot be redefined in any type instance.  The -t option turns on execution tracing for this function.  The -u option causes this function to be marked undefined.  The FPATH variable will be searched to find the function definition when the function is referenced.  If no options other than -f is specified, then the function definition will be displayed on standard output.  If +f is specified, then a line containing the function name followed by a shell comment containing the line number and path name of the file where this function was defined, if any, is displayed.  The exit status can be used to determine whether the function is defined so that typeset -f .sh.math.name will return 0 when math function name is defined and non-zero otherwise. -b     The variable can hold any number of bytes of data.  The data can be text or binary.  The value is represented by the base64 encoding of the data.  If -Z is also specified, the size in bytes of the data in the buffer will be determined by the size associated with the -Z.  If the base64 string assigned results in more data, it will be truncated.  Otherwise, it will be filled with bytes whose value is zero.  The printf format %B can be used to output the actual data in this buffer instead of the base64 encoding of the data. -h     Used within type definitions to add information when generating information about the sub-variable on the man page.  It is ignored when used outside of a type definition.  When used with -f the information is associated with the corresponding discipline function. -i     Declares vname to be represented internally as integer. The right hand side of an assignment is evaluated as an arithmetic expression when assigning to an integer.  If n is non-zero, it defines the output arithmetic base, otherwise the output base will be ten. -l     Used with -i, -E or -F, to indicate long integer, or long double.  Otherwise, all upper-case characters are converted to lower-case.  The upper-case option, -u, is turned off. Equivalent to -M tolower . -m     moves or renames the variable.  The value is the name of a variable whose value will be moved to vname.  The original variable will be unset.  Cannot be used with any other options. -n     Declares vname to be a reference to the variable whose name is defined by the value of variable vname.  This is usually used to reference a variable inside a function whose name has been passed as an argument.  Cannot be used with any other options. -p     The name, attributes and values for the given vnames are written on standard output in a form that can be used as shell input.  If +p is specified, then the values are not displayed. -r     The given vnames are marked readonly and these names cannot be changed by subsequent assignment. -s     Used with -i, -E or -F, to indicate short integer, or float. -t     Tags the variables.  Tags are user definable and have no special meaning to the shell. -u     When given along with -i, specifies unsigned integer. Otherwise, all lower-case characters are converted to upper-case.  The lower-case option, -l, is turned off. Equivalent to -M toupper . -x     The given vnames are marked for automatic export to the environment of subsequently-executed commands.  Variables whose names contain a .  cannot be exported.