3

Как я могу определить последнюю строку "пока читается строка"?

например:

    while read line; do
       if [ "$line" = "last line" ]; then
           echo "this line is the last one ($line);"
       else
           echo "$line"
       fi

    done <<< "$lines"

1 ответ1

3

Здесь есть проблема, если у вас есть непредсказуемый ввод (например, ручной ввод). Если вы не можете сказать будущее, которое вы не можете тривиально (то есть с помощью конструкции 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 если вы не привыкли к этим тестам.

(Хотя моя интуиция хочет спросить вас, что вы на самом деле пытаетесь сделать :-).)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .