Saya telah mendefinisikan warna merah menggunakan tput
red=$(tput setaf 1)
untuk mewarnai peringatan di program saya. Ini berfungsi dengan baik:
printf '%sfail\n' "$red"
# prints 'fail' in red
Tetapi pada satu kesempatan saya ingin mencetak urutan melarikan diri apa adanya, seperti:
\ E [31m gagal
Bagaimana saya melakukan ini? Saya tahu printf memiliki %q
bendera tetapi lolos dari hal-hal lain yang tidak saya inginkan.
shell
escape-characters
printf
metode helpermet
sumber
sumber
\E
, atau karakter kontrol lainnya?Jawaban:
Kedengarannya seperti Anda ingin kebalikan dari mencetaknya secara harfiah, Anda ingin agar karakter yang lolos diubah menjadi bentuk deskriptif yang dapat dicetak seperti
\E
atau\033
,^[
...Jika hanya karakter ESC (0x1b) yang ingin Anda konversi
\E
, kemudian denganksh93
,zsh
ataubash
(biasanya, karakter yang sama yang juga mendukung non-standar%q
), Anda dapat melakukan:Atau pipa ke
sed $'s/\e/\\\\E/g'
Untuk pendekatan yang lebih umum dalam mengonversi karakter non-grafis, Anda dapat menggunakan:
sumber
Gunakan
od
,hexdump
,xxd
, atau mirip dengan mencetak data biner dalam bentuk manusia-dibaca. Sebagai contoh:sumber
Anda dapat menggunakan
printf
secara langsung, missumber