Здесь есть проблема, если у вас есть непредсказуемый ввод (например, ручной ввод). Если вы не можете сказать будущее, которое вы не можете тривиально (то есть с помощью конструкции while read line
) узнать, что находится рядом с последним. Кроме того, поскольку цикл останавливается при прекращении ввода, вам нужно будет сохранить определенную строку и воздействовать на нее после ее "поворота в цикле". Не раньше, тогда вы можете знать, был ли это последний. Если ввод представляет собой фиксированную строку или файл, это скорее теоретическое рассмотрение, чем практическое.
Прототип для того, что вы хотите:
unset lastline
while read line; do
if ! [ -z "$lastline" ]; then
echo "$lastline"
fi
lastline=$line
done <<< "$lines"
echo "This is the last one: $lastline"
unset lastline
просто "защищает вас", если вы запускаете один и тот же скрипт, например, в терминале несколько раз, так как $lastline
тогда может быть не пустым для начала. Вы также можете очистить его после последнего echo
если это может быть проблемой.
! [ -z "$lastline" ]
возвращает true, если переменная $lastline
не пуста (технически, если длина строки не равна нулю). Смотрите man test
если вы не привыкли к этим тестам.
(Хотя моя интуиция хочет спросить вас, что вы на самом деле пытаетесь сделать :-).)