如何将转义序列与常量字符串进行比较?

斯坦顿拱门

我想根据终端的背景颜色有条件地进行操作,发现运行时可以掌握它的颜色。

printf '\e]11;?\a'

在我的情况下,输出是

stanton@mybox:~$ printf '\e]11;?\a'
^[]11;rgb:ffff/ffff/ffff^Gstanton@mybox:~$ 11;rgb:ffff/ffff/ffff

这已经很混乱了。无论如何,我想到要进行类似的测试

[ "$(printf '\e]11;?\a')" = "^[]11;rgb:ffff/ffff/ffff^G" ] && echo it\'s light || echo it\'s dark

但这是行不通的。(我尝试过想出的任何可能的字符串变体,无论是否带有转义序列等,都没有结果。)

我该怎么做才能比较printf和一个字符串的输出?

这里

问题是您不希望输出printf,而是需要终端的答复。$(...)不会评价此回复,因为我们可以看到:

$ v=$(printf '\e]11;?\a')
$ printf "%q\n" "$v"
$'\E]11;?\a'

变量v与第一个printf的输出相同($'...'是%q引用字符串的格式的结果)。

您需要使用shell的read命令来捕获来自终端的答复。例如,使用bash:

$ read  -n 24 -p "$v"  reply
$ printf "%q\n" "$reply"
$'\E]11;rgb:ffff/ffff/ffff\a'

在这里-p用于打印变量$v,并且该变量reply从终端响应中读取24个字符。最后的printf显示reply包含您期望的字符串。因此,您可以与它进行比较:

[ "$reply" = $'\e]11;rgb:ffff/ffff/ffff\a' ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将DateFormat与字符串数组进行比较

如何将类的属性与字符串进行比较?

如何将字符串与python枚举进行比较?

如何将属性值与字符串进行比较

如何将nextLine()与字符串进行比较

如何将字符串与传入消息进行比较

如何将字符串与字典键进行比较

如何将字符串与unicode词典进行比较?

如何将两列字符串进行比较

如何将包含字符转义序列的字符串转换为char?

如何将字符串与结构(也包括字符串)进行比较?

如何将JSON日期字符串与javascript字符串进行比较?

Javascript:如何将字符串与字符串数组进行比较

VBA excel:如何将字符串数组与字符串进行比较?

如何将字符串值与微调器中的字符串进行比较?

如何将存储的字符串与输入的字符串进行比较-MIPS

c# - 如何将字符串值与字符串数组的元素进行比较?

如何将Unicode字符串转换为Unicode转义序列?

如何将字符串中的文字转义序列转换为相应的字节?

将字符串与字符序列进行比较

如何定义将忽略转义序列的字符串?

C#将arduino序列与字符串进行比较

如何将整数与 C 中字符串中的字符进行比较?

如何将字符串与多个字符进行比较c ++

如何将 tcl 字符串与中间的不关心字符进行比较?

Python:如何将列表的最后一个元素与字符串的字符进行比较

如何将转义连接到字符串?

如何将变量插入转义字符串文字?

如何将常量字符串与常量字符串连接?