Skip to content

Files

Latest commit

 

History

History
30 lines (18 loc) · 1.1 KB

SC2318.md

File metadata and controls

30 lines (18 loc) · 1.1 KB

Pattern: Ineffective assignment in declare

Issue: -

Description

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.

Example of incorrect code:

declare -i first=$1 current=$first

Example of correct code:

declare -i first=$1
declare -i current=$first

Further Reading