Skip to content
James edited this page Dec 1, 2025 · 3 revisions

Prefer [[ ]] over [ ] for tests in Bash/Ksh.

Optional - require-double-brackets

This is an optional rule, which means that it has a special "long name" and is not enabled by default. See the optional page for more details. In short, you have to enable it with the long name instead of the "SC" code like you would with a normal rule:

.shellcheckrc

enable=require-double-brackets # SC2292

Problematic code:

[ -e /etc/issue ] 

Correct code:

[[ -e /etc/issue ]]

Rationale:

ShellCheck has been explicitly asked to warn about uses of [ .. ] in favor of the extended Bash/Ksh test [[ .. ]].

[[ .. ]] suppresses word splitting and globbing, supports a wider variety of tests, and is generally safer and better defined than [ .. ]. For an in-depth list of differences, see the Related Resources.

Exceptions:

This check is not enabled by default, and may have been turned on for your current project by someone who wants it enforced. You can still ignore it with a directive.

This suggestion does not trigger for Sh or Dash scripts, even when explicitly enabled, as these shells don't support [[ .. ]].

Related resources:

Clone this wiki locally