SC2206 – ShellCheck Wiki

See this page on GitHub

Sitemap


Quote to prevent word splitting/globbing, or split robustly with mapfile or read -a.

Problematic code:

array=( $var )

Correct code:

If the variable should be a single element:

array=( "$var" )

If it's multiple lines, each of which should be an element:

# For bash
mapfile -t array <<< "$var"

# For ksh
printf '%s\n' "$var" | while IFS="" read -r line; do array+=("$line"); done

If it's a line with multiple words (separated by spaces, other delimiters can be chosen with IFS), each of which should be an element:

# For bash
IFS=" " read -r -a array <<< "$var"

# For ksh
IFS=" " read -r -A array <<< "$var"

Rationale:

You are expanding a variable unquoted in an array. This will invoke the shell's sloppy word splitting and glob expansion.

Instead, prefer explicitly splitting (or not splitting):

This prevents the shell from doing unwanted splitting and glob expansion, and therefore avoiding problems with data containing spaces or special characters.

Exceptions:

If you have already taken care (through setting IFS and set -f) to have word splitting work the way you intend, you can ignore this warning.


ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.