Мне нужна как можно более короткая команда bash test (скобочный тест), чтобы оценить результат конвейерного grep с переменной в качестве аргумента поиска. Я проверяю, есть ли новая строка в массиве - отправляя содержимое массива в виде строк в grep и проверяя код выхода. Но это как-то не работает. Не находит значение в массиве. Я пробовал по-разному скобки, скобки, кавычки, точки с запятой без удачи. Что здесь не так?
#! /bin/bash
startLineNrs=();
startLineNrs+=("45");
startLineNrs+=("280");
startLineNrs+=("80");
startLineNr="280";
echo "\$startLineNrs:" ${#startLineNrs[@]};
printf '%s\n' "${startLineNrs[@]}";
[ "$(printf '%s\n' ${startLineNrs[@]} | grep -xq ${startLineNr})" ] && { echo $?; echo Found ;} || { echo $?; echo Not found ;}
В основном я хочу понять, если ... тогда построить против теста скобок. Метод if ... then работает:
if !( printf '%s\n' "${startLineNrs[@]}" | grep -xq "${startLineNr}" ); then startLineNrs+=("$startLineNr") ; fi