-
Notifications
You must be signed in to change notification settings - Fork 1.8k
SC1014
Vidar Holen edited this page Aug 31, 2018
·
9 revisions
if [ grep -q pattern file ]
then
echo "Found a match"
fi
if grep -q pattern file
then
echo "Found a match"
fi
[ .. ]
is not part of shell syntax like if
statements. It is not equivalent to parentheses in C-like languages, if (foo) { bar; }
, and should not be wrapped around commands to test.
[
is just regular command, like whoami
or grep
, but with a funny name (see ls -l /bin/[
). It's a shorthand for test
.
If you want to check the exit status of a certain command, use that command directly as demonstrated in the correct code.
If you want to check the output of a command, use "$(..)"
to get its output, and then use test
or [
/[[
to do a string comparison:
# Check output of `whoami` against the string `root`
if [ "$(whoami)" = "root" ]
then
echo "Running as root"
fi
For more information, see this problem in the Bash Pitfall list, or generally Tests and Conditionals in the WoolEdge BashGuide
None.