Я хочу сравнить 8.8.8.8 (первое значение массива) с последними 3 значениями массива
Просто получите первое значение в выводе и добавьте в него последние 3 строки:
output="8.8.8.8
8.8.8.8
192.192.192.21
192.191.191.32
192.18.128.48
8.8.8.8
192.168.168.168"
output=$(sed '/^$/d' <<<"$output") # remove empty lines
if grep -q "$(head -n1 <<<"$output")" <(tail -n3 <<<"$output"); then
echo "Last three lines of output contain first line of the output"
else
echo "fus ro dah"
fi
Теперь к вашему коду:
for i in ${my_array[@]};
Итерация по значениям в my_array
. Если вы хотите индексы массива, вам нужно перебрать их с for ((i = 0; i < ${#my_array[@]}; ++i))
. Теперь я думаю это:
for ((i = ${#my_array[@]} - 3; i < ${#my_array[@]}; ++i)); do
if [ "${my_array[0]}" = "${my_array[i]}" ]; then
echo "values are same";
else
echo "values are not same";
fi
echo $i;
done
, вероятно, будет делать то, что вы хотите, но с использованием grep:
if grep -q "${my_array[0]}" <(printf "%s\n" "${my_array[@]: -3}"); then
echo "values are same"
else
echo "values are not same"
fi
еще проще (для меня).
Также обратите внимание, что «оператор» сравнения строк (не знаю, как это называется) в test равен =
, а не ==
.