Skip to content
Joachim Ansorg edited this page Nov 12, 2021 · 6 revisions

Use grep -q instead of comparing output with [ -n .. ].

Problematic code:

if [ "$(find . | grep 'IMG[0-9]')" ]
then
  echo "Images found"
fi

Correct code:

if find . | grep -q 'IMG[0-9]'
then
  echo "Images found"
fi

Rationale:

The problematic code has to iterate the entire directory and read all matching lines into memory before making a decision.

The correct code is cleaner and stops at the first matching line, avoiding both iterating the rest of the directory and reading data into memory.

Exceptions

The pipefail bash option may interfere with this rewrite, since the if will now in effect be evaluating the statuses of all commands instead of just the last one. Be careful using them together.

ShellCheck

Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally