Octave'系统'不解释转义序列

时间:2014-12-24 21:44:15

标签: printf system octave

从提示符或脚本执行此命令时

system ("printf ""\\x1B[32mword\\x1B[0m\n""");

它将打印此文本

\x1B[32mword\x1B[0m

而不是解释printf linux命令的转义序列。 Octave的unix将提高相同的输出。

从Linux终端的提示符中正确解释了相同的命令,打印了“#word;'绿色。

如何解释颜色转义序列而不是原始文本?

在GNU Octave版本3.6.1上运行。

更新:似乎Octave不支持这些转义序列(link),即使GNU页面定义它(link)。正确的命令是

system ("printf ""\x1B[32mejemplo\x1B[0m\n""");

及其输出

warning: unrecognized escape sequence \x' -- converting to x' warning: unrecognized escape sequence \x' -- converting to x' x1B[32mejemplox1B[0m

更新:与此同时,我已经解决了这个bash脚本的问题,当然可以通过system调用来调用它。

#!/bin/bash
#
# formatted output
#   arguments:
#
#     Text attributes
#     0 All attributes off
#     1 Bold on
#     4 Underscore (on monochrome display adapter only)
#     5 Blink on
#     7 Reverse video on
#     8 Concealed on
#     
#     Foreground colors
#     30 Black
#     31 Red
#     32 Green
#     33 Yellow
#     34 Blue
#     35 Magenta
#     36 Cyan
#     37 White
#     
#     Background colors
#     40 Black
#     41 Red
#     42 Green
#     43 Yellow
#     44 Blue
#     45 Magenta
#     46 Cyan
#     47 White

if [[ "$#" -ne 4 ]]; then
  echo "cprintf (bash): wrong number of parameters."
  exit 1
fi

printf "\x1b[%d;%d;%dm%s\x1b[0m" $1 $2 $3 $4

1 个答案:

答案 0 :(得分:2)

Octave interprets double quoted strings。你的八度版本不理解\x。 解决方案是使用单引号字符,因为

  

在单引号字符串中,反斜杠不是特殊字符

让bash处理颜色转义序列:

system('bash -c ''printf "\x1B[32mword\x1B[0m\n"''');

需要重复的单引号,以便系统启动的命令为

bash -c 'printf "\x1B[32mword\x1B[0m\n"'

这将在新的printf "\x1B[32mword\x1B[0m\n" shell中执行bash命令。 并且双引号之间的字符串中的转义字符被正确解释。

作为旁注,在linux上使用octave 3.8.2,你可以发出

system('printf "\x1B[32mword\x1B[0m\n"');

甚至

printf "\x1B[32mword\x1B[0m\n"