-
Notifications
You must be signed in to change notification settings - Fork 1.8k
SC2206
Ulrik Haugen edited this page Apr 25, 2024
·
9 revisions
array=( $var )
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"
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):
- If the variable should become a single array element, quote it.
- If you want to split into lines or words, use
mapfile
,read -ra
and/orwhile
loops as appropriate.
This prevents the shell from doing unwanted splitting and glob expansion, and therefore avoiding problems with data containing spaces or special characters.
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.