尝试跨行打印,让我在某处有额外的“![K”

Trying to print over line, gets me extra "![K" somewhere

问题

我了解到您可以使用 3[K 擦除到 bash 行的末尾,然后使用 \r 回到行首。因此,您可以将它们组合起来,用另一行覆盖一行。

我尝试了不同的配置和几乎任何安排,甚至。

\r3[K\rString\r

总有一个额外的 ![K 来自某个地方。

实际Haskell脚本详细信息

我现在使用的实际脚本是:

putStrOver :: String -> IO ()
putStrOver str = putStr $ "3[K" ++ str ++ "\r"

并用作:

forM [1..n] $ \i -> do
    -- calc percentage
    putStrOver $ "Generating: " ++ show perc ++ "%"

我得到的是:

正在尝试隔离问题

所以总有这个烦人的额外 ![K 部分是从某处生成的。我首先认为它可能是来自其他地方的一些 !,所以我采用了全新的 GHCi 环境并测试了该功能:

mapM_ (\i -> putStrOver . show $ i) [1..]

它仍然打印 ![K:

我正在 Mac OS X Yosemite 上使用终端机 bash,如果这有什么用的话。

问题

这是怎么回事?我该如何解决这个问题?

Haskell,与我所知道的(或至少现在能想到的)所有其他编程语言不同,它不会将 3 解释为八进制文字,而是十进制文字。这解释了为什么你得到 !,因为 ! 在 ASCII 中是 33。

解决方法是将haskell代码中的3替换为\o33(或\x1b</code>)。或者,也许更漂亮的是 <code>\ESC。它们的意思都是一样的,所以选择你认为最易读的那个。