3 SC1033
John Gardner edited this page 2021-12-22 19:25:29 +11:00

Test expression was opened with double [[ but closed with single ]. Make sure they match.

(or SC1034 for vice versa)

Problematic code:

[[ -z "$var" ]

Correct code:

[[ -z "$var" ]]

Rationale:

ShellCheck found a test expression [ ... ] (POSIX) or [[ ... ]] (ksh/bash), but where the opening and closing brackets did not match (i.e. [[ .. ] or [ .. ]]). The brackets need to match up to work.

Note in particular that [..] do not work like parentheses in other languages. You can not do:

# Invalid
[[ x ] || [ y ]]

You would instead use two separate test expressions joined by ||:

# Valid basic test expressions (sh/bash/ksh)
[ x ] || [ y ]

# Valid extended test expressions (bash/ksh)
[[ x ]] || [[ y ]]

Exceptions:

None

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!