[%' = {$ percentDone} s>% - {$ percetageLeft} s]是什么意思?

时间:2015-12-29 16:00:02

标签: php bash ansi-escape

我发现这个很酷的进度条我使用: https://stackoverflow.com/a/27147177/1480397

但我不知道它在做什么,而且我没有谷歌。

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

这就是我正在使用的。

我认为序列是:

  • \r - 回车,回去开始
  • \033[0G - Esc[0g清除当前列的标签* * / / li>
  • \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);
}

1 个答案:

答案 0 :(得分:1)

然后,ansi转义码对我来说是正确的:

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

与ansi无关。它通过sprintf填充:

'={$percentageDone}

将填充x&#39; =&#39; chars,其中x是$ percentageDone中的值。

有关详细信息,请参阅sprintf文档。