declare
options instead.local readonly foo=3
readonly export bar=4
local foo=3
readonly foo
readonly bar=4
export bar
or
declare -r foo=3
declare -rx bar=4
In most languages, declaration modifiers like
public
/static
/const
are keywords
and you can apply multiple to any declaration.
In shell scripting they are instead command names, and anything after
them is an argument. This means that readonly local foo
will create two readonly variables: local
, and
foo
. Neither will be local.
Instead, either use multiple commands, or use a single
declare
command with appropriate flags
(declare
will automatically make a variable local when
invoked in a function, unless -g
is passed to explicitly
make it global).
If you want to name your variable local
, you can quote
it as in readonly "local"
to make your intention clear to
ShellCheck and other humans.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.