Что означает [% ‘= {$ процентаDone} s & gt;% — {$ percetageLeft} s]?

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

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

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

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

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

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

* Это не делает то, что я ожидаю, когда я удаляю код, Source: 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);
}

1

Решение

Однако коды возврата ANSI выглядят корректно:

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

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

'={$percentageDone}

заполнит строку символами x ‘=’, где x — это значение в $ процентном выражении.

Увидеть Sprintf документы для деталей.

1

Другие решения

Других решений пока нет …