Skip to content
koalaman edited this page May 17, 2014 · 7 revisions

Instead of [ -n $(foo | grep bar) ], use foo | grep -q bar .

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.

Contraindications

None.

Clone this wiki locally

⌂ 换网址