我可以像这样改变光标形状:
printf "\x1b[\x31 q" # block :)
printf "\x1b[\x35 q" # ibeam :)
但是当我将其分配给变量%s
并使用扩展时printf
,它不起作用:
CURSOR="\x1b[\x3%s q"
printf ${CURSOR} 1 # block :(
printf ${CURSOR} 5 # ibeam :(
我该如何解决?
答案1
\x31
是字符1
并且\x35
是5
,所以在这种情况下您不必使用转义序列。
CURSOR="\x1b[%s q"
printf "${CURSOR}" 1
printf "${CURSOR}" 5
答案2
通过使用\x3%s
, only\x3
被解释为转义序列,%s
不再是其中的一部分。如果你想让该部分成为一个参数,你必须使用%b
并拿出整个部分\x31
来将其解释为转义序列:
$ printf "\x1b[\x31 q" | od -c
0000000 033 [ 1 q
0000005
$ printf "\x1b[%b q" "\x31" | od -c
0000000 033 [ 1 q
0000005