从提示符或脚本执行此命令时
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
答案 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"