Так что мое утверждение if неверно. Кто-нибудь
знаешь почему?
Ну, это тестовое утверждение (в пределах [ ]
), которое кажется неправильным.
Это своего рода смешение двух языков: командного языка bash (которые представляют собой команды, исполняемые файлы по конвейеру + синтаксис потока управления).
OTOH, в []
выше, это язык выражений программы test
, см. Справочную страницу: $ man test : "(EXPRESSION)".
Выражение: не , а произвольная команда оболочки, но что-то созданное из примитивов (строк, чисел и т. Д.) И операторов (-eq, -oe).
Одним из мостов между этими двумя языками, конечно же, является backtick, который запускает в нем команду bash и заменяет вывод на строку , с которой test
затем может работать.
Итак, как кратко ответили другие, просто выдвиньте галочки на границу левой стороны, то есть из:
if [ (`grep -R -l "${images}" *` | wc -l) == 1 ]
до
if [ `grep -R -l "${images}" * | wc -l` = 1 ]
ОБНОВЛЕНИЕ: глядя на вашу вторую версию, другая проблема заключается в том, что ==
не является допустимым оператором в test
(снова, см. Man-страницу). Вместо этого используйте обычный =
.
С другой стороны, ==
поддерживается самим bash (в достаточно недавних версиях) - немного сбивает с толку ..