커서 모양을 다음과 같이 변경할 수 있습니다.
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
is 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