【问题标题】:How do I echo a backspace from php cli?如何从 php cli 回显退格键?
【发布时间】:2013-02-15 22:48:24
【问题描述】:

本题:https://askubuntu.com/questions/16149/overwrite-previous-output-in-bash-instead-of-appending-it

说明如何将倒计时作为 bash 脚本进行。我想做同样的事情,但我需要用 PHP 来做。有没有办法回显退格?

例如

echo "Counting down 60\n";
sleep(1);
echo "\b\b\b59\n";
sleep(1);
echo "\b\b\b58\n";

但是,echo "\b" 没有任何作用。

【问题讨论】:

    标签: php bash command-line-interface


    【解决方案1】:

    Strings - Double quoted 开始,没有\b 被识别为转义序列。您可以使用ASCII 退格十六进制或八进制代码

    $bs = "\x08";
    echo "Counting down 60";
    sleep(1);
    echo "$bs$bs59";
    sleep(1);
    echo "$bs$bs58";
    

    或者一直循环到零

    $bs = "\x08";
    for ($i = 59; $i >= 0; --$i) {
        sleep(1);
        printf("$bs$bs%2d", $i);
    }
    

    您也必须省略换行符\n

    【讨论】:

    • 认真的吗? PHP有一个垂直制表符\v的转义序列,但没有退格\b?通过具有类似的转义序列,可以更轻松地从任何 C 转换...
    【解决方案2】:

    退格符对应ASCII字符码8,可以使用PHP的char()函数输出。

    例如。如果您执行以下操作:

    echo 'Hello, world!' . chr(8);
    

    结果输出是:

    Hello, world
    

    【讨论】:

    • 我想我应该澄清一下,这只有在您在命令行上下文中工作时才真正有用。如果你只是想向某人显示一个修改过的字符串,你最好使用像substr()这样的普通字符串函数或类似的东西来修改它。
    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 2023-01-24
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多