org.sonar.l10n.shellcheck.rules.shellcheck.SC2205.html Maven / Gradle / Ivy
Show all versions of sonar-shellcheck-plugin Show documentation
(..) is a subshell. Did you mean [ .. ], a test expression?
Problematic code
if ( 1 -lt 2 )
then
echo "1 is less than 2"
fi
Correct code
if [ 1 -lt 2 ]
then
echo "1 is less than 2"
fi
Rationale
Tests like -eq
to check numeric equality or \<
for string comparison only work are actually parameters to the test
command, and only work as tests in that context. [
is an alias for test
, so you'll frequently see them written as [ 1 -eq 2 ]
.
( .. )
is completely unrelated, and is a subshell mostly used to scope shell modifications. They should not be used in if
or while
statements in shell scripts.
If you wanted to test a condition, rewrite the ( .. )
to [ .. ]
.
Exceptions
This error is triggered by having a binary operator as the first parameter in a subshell, and could falsely trigger on e.g. if ( grep -eq "foo|bar" file )
. In these cases, check whether the subshell is actually needed.
Note that there's a similar looking error [[SC2204]] with a low false positive rate.