declare
options instead.local readonly foo=3
readonly export bar=4local foo=3
readonly foo
readonly bar=4
export baror
declare -r foo=3
declare -rx bar=4In 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.