declare
, but won't have
taken effect. Use two declare
s.(or local
, typeset
, readonly
,
export
)
declare -i first=$1 current=$first
declare -i first=$1
declare -i current=$first
When assigning variables via a command, such as declare
,
typeset
, local
etc, the expansion of all
arguments happen before all assignments. This means that you can't have
a variable assigned and then referenced in the same command.
In the example, if $1
is 42, the arguments will first be
expanded in the current environment into
-i first=42 current=
. They will then be passed to
declare
which will perform the assignments.
To correctly set current=$first
so that it uses the new
value of first
, use two separate commands as shown.
Note that this only applies when assigning via commands, because
arguments are always expanded before commands are invoked. If assigning
without a command, as in first=$1 current=$first
, it will
work as expected.
If you want to reference the value as it existed before the command,
e.g. if swapping variables with declare x=$y y=$x
, you can
ignore this message. However, consider rewriting it anyways for the
benefit of any humans reading the code.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.