local readonly foo=3 readonly export bar=4
local foo=3 readonly foo readonly bar=4 export bar
declare -r foo=3 declare -rx bar=4
In most languages, declaration modifiers like
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:
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.