Skip to content
Joachim Ansorg edited this page Nov 12, 2021 · 3 revisions

Arrays implicitly concatenate in [[ ]]. Use a loop (or explicit * instead of @).

Problematic code:

ext=png
allowedExt=(jpg bmp png)
[[ "$ext" = "${allowedExt[@]}" ]] && echo "Extension is valid"

Correct code:

ext=png
allowedExt=(jpg bmp png)
for value in "${allowedExt[@]}"
do
  [[ "$ext" = "$value" ]] && echo "Extension is valid"
done

Rationale:

Array expansions in [[ .. ]] will implicitly concatenate into a single string, much like in assignments. The problematic code is equivalent to [ "$ext" = "jpg bmp png" ].

Instead, use a for loop to iterate over values, and apply your condition to each.

Alternatively, if you do want to concatenate all the values in the array into a single string for your test, use "$*" or "${array[*]}" to make this explicit.

Exceptions:

None.

ShellCheck

Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally