Skip to content

Files

Latest commit

 

History

History
47 lines (30 loc) · 1.22 KB

SC2178.md

File metadata and controls

47 lines (30 loc) · 1.22 KB

Pattern: Assigning/appending string to array

Issue: -

Description

You have used a variable as an array, but then assign it a string. array=foo is equivalent to array[0]=foo, and leaves the rest of the elements unaffected.

In the incorrect code, "${flags[@]}" would contain --dry-run --delete-after.

To set an array to only a single, given element, you should use array=( foo ).

In the correct code, "${flags[@]}" will contain --dry-run only.

Another possible cause is accidentally missing the $ on a previous assignment: var=(command); var=bar instead of var=$(command); var=bar. If the variable is not intended to be an array, ensure that it's never assigned as one.

Example of incorrect code:

flags[0]="-r"
flags[1]="--delete-after"

if [ "$dryrun" ]
then
   flags="--dry-run"
fi

Example of correct code:

flags[0]="-r"
flags[1]="--delete-after"

if [ "$dryrun" ]
then
   flags=( "--dry-run" )
fi

Exceptions

ShellCheck can get confused by variable scope if the same variable name was used as an array previously, but is a string in the current context. You can ignore it in this case.

Further Reading