
カーソルの外観を次のように変更できます。
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
is5
なので、この場合はエスケープシーケンスを使用する必要はありません。
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