Если ack находит результаты, сделайте это; еще сделать это
Я пытаюсь написать сценарий, который автоматизирует одну из моих более утомительных задач. У меня почти все получилось, и я могу заставить отдельные компоненты кода делать то, что я от них хочу, но я сталкиваюсь с проблемами, пытаясь заставить оператор if работать. Вот что я пытаюсь сделать:
if [ ack --ignore-case 'foo' ]; then
Do this action
else
Do that action
fi
На данный момент он всегда выполняет действие else, даже если параметр ack имеет значение true.
Спасибо!
2 ответа
Удалить [
- вы хотите проверить статус выхода ack:
if ack --ignore-case 'foo'; then
ack возвращает статус выхода 0 (успех), если найдено совпадение.
Хотя это может выглядеть как синтаксическая конструкция, [
на самом деле функция (синоним test
), который возвращает 0, если тест пройден. if
смотрит на код возврата этой функции. В этом случае, ack дает вам код возврата, который вам нужен, поэтому вы также не должны использовать [
,
Просто бросьте квадратные скобки
if ack --ignore-case 'foo' ; then
Do this action
else
Do that action
fi
Вы не хотите проверять, что строка ack --ignore-case 'foo'
не пусто, вы хотите проверить статус выхода ack.
Вы должны были получить предупреждение о том, что:
-bash: [: --ignore-spaces: binary operator expected