Что означает [%'={$percentageDone}s›%-{$percetageLeft}s]?

Я нашел этот классный индикатор выполнения, который я использую: https://stackoverflow.com/a/27147177/1480397

Но я понятия не имею, что он делает, и я не могу найти его в Google.

"\r\033[0G\033[2K[%'={$percentageDone}s>%-{$percetageLeft}s] -   $percentageDone%% - $absoluteDone/$absoluteTotal - avg %.4f - %s",

Это то, что я использую.

Я думаю, что последовательности:

  • \r - возврат каретки, вернуться к началу
  • \033[0G - Esc[0g Очистить вкладку в текущем столбце` *
  • \033[2K- Esc[2K Очистить всю строку *
  • [%'={$percentageDone}s>%-{$percetageLeft}s]

* Это не делает то, что я ожидаю, когда я удаляю код, Источник: http://ascii-table.com/ansi-escape-sequences-vt-100.php

Итак, правильно ли извлечены эти последовательности? Верна ли интерпретация? А почему последние пишут крутые бары?

[====>                                       <much more spaces>       ]

Код для тестирования:

for ($i = 0; $i <= 100; $i++) {
    $absoluteDone = $i;
    $absoluteTotal = 100;
    $percentageDone = floor(($absoluteDone / $absoluteTotal) * 100);
    $percetageLeft = 100 - $percentageDone;
    $avgTime = 10;
    $setCursorToLineStart = "\033[0G";
    $clearLine = "\033[2K";
    $progressbarAndStatusInfo = sprintf(
        $setCursorToLineStart
        . $clearLine
        . "[%'={$percentageDone}s>%-{$percetageLeft}s] - $percentageDone%% - $absoluteDone/$absoluteTotal - avg %.4f - %s",
        "",
        "",
        $avgTime,
        gmdate("H:i:s", $avgTime * ($absoluteTotal - $absoluteDone))
    );

    echo $progressbarAndStatusInfo;
    sleep(1);
}

person Fabian Blechschmidt    schedule 29.12.2015    source источник
comment
Прочтите Как задать хороший вопрос и идеальный вопрос   -  person RiggsFolly    schedule 29.12.2015
comment
Не уверен, что не так. У меня есть четыре escape-последовательности, которые мне нужно понять? Что общего в этом вопросе?   -  person Fabian Blechschmidt    schedule 29.12.2015
comment
предоставить контекст для кода (sprintf!)   -  person Karoly Horvath    schedule 29.12.2015
comment
Похоже, он пытается имитировать обновления в стиле ncurses. Напишите строку с символами «=» разной длины, за которыми следуют пробелы, чтобы заполнить строку. Затем возврат каретки, очистка и повторение.   -  person ethrbunny    schedule 29.12.2015


Ответы (1)


Однако escape-коды ansi кажутся мне правильными:

[%'={$percentageDone}s>%-{$percetageLeft}s]

не имеет ничего общего с анси. Это дополнение через sprintf:

'={$percentageDone}

заполнит строку символами x '=', где x — значение в $percentageDone.

Подробнее см. в документации sprintf.

person Erik Dannenberg    schedule 30.12.2015