(..)
is a subshell. Did you mean [ .. ]
, a test expression?if ( -d mydir )
then
echo "It's a directory"
fi
if [ -d mydir ]
then
echo "It's a directory"
fi
Tests like -d
to see if something is a directory or
-z
to see if it's non-empty are actually flags 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 [ -d mydir ]
.
( .. )
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
[ .. ]
.
None.
This error is triggered by having a unary test operator as the first command name in a subshell, which won't normally happen. Note that there's a similar warning SC2205 with a higher false positive rate.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.