Попробуйте следующее изменение:
#!/bin/bash
LOOK_FOR="NTLMAuthenticationFilter"
find ./ -name "*.jar" -print | while read -r FILE
do
echo "Looking in ${FILE} ..."
grepjar -e "${LOOK_FOR}" "${FILE}" 2>/dev/null >/dev/null
RETCODE=${?}
if [ ${RETCODE} -eq 0 ]; then
  echo "Found ${LOOK_FOR} in ${FILE}"
fi
done
? переменная хранит возвращаемое значение последней команды.  Обычно это будет 0 для успеха и любое другое значение для неудачи.
Вы также заметите, что я включил команду for команду while .  Это позволяет получить больший набор возвращаемых результатов.
Разбить эту find ./ -name "*.jar" -print | while read -r FILE :
find ./ - начиная с текущего каталога ...
-name "*.jar" - найти файлы, заканчивающиеся на .jar ...
-print - и напечатать их имена
| - перенаправить этот вывод в следующую команду while read -r FILE - и, пока есть вывод из предыдущей команды, назначить его переменной FILE и выполнить команды между do и done .
Другими словами, он принимает выходные данные команды find (список файлов, оканчивающихся на jar) и запускает блок кода в цикле.  Для краткого списка он ведет себя точно так же, как ваша версия, использующая цикл for i in .  Преимущество состоит в том, что он поддерживает длинные списки, поскольку существует верхний предел того, что вы можете передать в командной строке, как вы делали с циклом for i in .
Изменить: Изменен скрипт bash, изменен стиль цитирования переменных, включены предложения из комментариев и некоторые другие изменения стиля.