【问题标题】:What does [%'={$percentageDone}s>%-{$percetageLeft}s] mean?[%'={$percentageDone}s>%-{$percetageLeft}s] 是什么意思?
【发布时间】:2015-12-30 23:15:57
【问题描述】:

我发现我正在使用这个很酷的进度条: 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 清除当前列的标签` *
  • \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);
}

【问题讨论】:

  • 不确定出了什么问题。我有四个需要理解的转义序列?这个问题的宽泛性是什么?
  • 为“代码”提供上下文 (sprintf !)
  • 看起来它正在尝试模仿 ncurses 样式更新。用不同长度的“=”写一行,然后用空格填充该行。然后回车,清除重复一遍。

标签: php bash ansi-escape


【解决方案1】:

然而,ansi 转义码在我看来是正确的:

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

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

'={$percentageDone}

将用 x '=' 字符填充该行,其中 x 是 $percentageDone 中的值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 2022-06-10
    • 2021-11-02
    • 2011-09-27
    • 1970-01-01
    • 2018-05-02
    • 2019-08-24
    • 2015-10-08
    相关资源
    最近更新 更多