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