从提示符或脚本执行此命令时
system ("printf ""\\x1B[32mword\\x1B[0m\n""");
它将打印此文本
\x1B[32mword\x1B[0m
而不是解释printf linux命令的转义序列。八度的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

最佳答案

八度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"

09-20 19:18