2023-04-16 10:04:24 +02:00
|
|
|
# The local builtin command
|
|
|
|
|
|
|
|
## Synopsis
|
|
|
|
|
|
|
|
local [option] name[=value] ...
|
|
|
|
|
|
|
|
## Description
|
|
|
|
|
2023-04-24 13:31:29 +02:00
|
|
|
`local` is identical to [declare](/commands/builtin/declare.md) in every
|
2023-04-16 10:04:24 +02:00
|
|
|
way, and takes all the same options, with two exceptions:
|
|
|
|
|
|
|
|
- Usage outside of a function is an error. Both `declare` and `local`
|
|
|
|
within a function have the same effect on variable scope, including
|
|
|
|
the -g option.
|
|
|
|
- `local` with no options prints variable names and values in the same
|
|
|
|
format as `declare` with no options, except the variables are filtered
|
|
|
|
to print only locals that were set in the same scope from which
|
|
|
|
`local` was called. Variables in parent scopes are not printed.
|
|
|
|
|
|
|
|
## Portability considerations
|
|
|
|
|
|
|
|
- `local` is not specified by POSIX. Most bourne-like shells don't have
|
|
|
|
a builtin called `local`, but some such as `dash` and the busybox
|
|
|
|
shell do.
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
|
|
|
|
- The behavior of function scope is not defined by POSIX, however local
|
|
|
|
variables are implemented widely by bourne-like shells, and behavior
|
|
|
|
differs substantially. Even the`dash` shell has local variables.
|
|
|
|
|
|
|
|
<!-- -->
|
|
|
|
|
|
|
|
- In ksh93, using POSIX-style function definitions, `typeset` doesn't
|
|
|
|
set `local` variables, but rather acts upon variables of the
|
|
|
|
next-outermost scope (e.g. setting attributes). Using `typeset` within
|
|
|
|
functions defined using ksh `function name {` syntax, variables follow
|
|
|
|
roughly
|
|
|
|
[lexical-scoping](http://community.schemewiki.org/?lexical-scope),
|
|
|
|
except that functions themselves don't have scope, just like Bash.
|
|
|
|
This means that even functions defined within a "function's scope"
|
|
|
|
don't have access to non-local variables except through `namerefs`.
|
|
|
|
|
|
|
|
## See also
|