Dalam printf '%s\t%s\n' foo bar
, printf
apakah output foo<TAB>bar<LF>
.
f
, o
, b
, a
Dan r
karakter grafis single-lebar.
Setelah menerima karakter-karakter itu, terminal akan menampilkan mesin terbang yang sesuai dan memindahkan kursor satu kolom ke kanan, kecuali itu sudah mencapai tepi kanan layar (kertas di mesin ketik tel-asli)), dalam hal ini mungkin memberi makan garis dan kembali ke tepi kiri layar (bungkus) atau hanya membuang karakter tergantung pada terminal dan bagaimana itu dikonfigurasi.
<Tab>
dan <LF>
dua karakter kontrol . <LF>
(alias baris baru) adalah pembatas baris dalam teks Unix, tetapi untuk terminal, itu hanya memberi makan garis (pindahkan kursor satu posisi ke bawah). Jadi driver terminal di kernel akan benar-benar menerjemahkannya <CR>
(kembali ke tepi kiri layar), <LF>
(kursor ke bawah) ( stty onlcr
umumnya aktif secara default).
<Tab>
memberitahu terminal untuk memindahkan kursor ke perhentian tab berikutnya (yang pada kebanyakan terminal terpisah 8 posisi secara default tetapi juga dapat dikonfigurasi untuk diatur di mana saja) tanpa mengisi celah dengan kosong.
Jadi, jika karakter-karakter tersebut dikirim ke terminal dengan tab berhenti setiap 8 kolom sementara kursor berada di awal baris kosong, itu akan menghasilkan:
foo bar
dicetak pada layar di garis itu. Jika dikirim saat kursor berada di posisi ketiga dalam baris yang berisi xxxxyyyyzzzz
, itu akan menghasilkan:
xxfooyyybarz
Pada terminal yang tidak mendukung tabulasi, driver terminal dapat dikonfigurasi untuk menerjemahkan tab tersebut ke urutan spasi. ( stty tab3
).
Karakter SPC, dalam mesin ketik tele asli akan memindahkan kursor ke kanan, sedangkan backspace ( \b
) akan memindahkannya ke kiri. Sekarang di terminal modern, SPC bergerak ke kanan dan juga menghapus (menulis karakter ruang seperti yang Anda harapkan). Jadi liontin \b
harus menjadi sesuatu yang lebih baru daripada ASCII. Pada kebanyakan terminal modern, itu sebenarnya urutan karakter: <Esc>
, [
, C
.
Ada lebih banyak urutan pelarian untuk memindahkan n
karakter ke kiri, kanan, atas, bawah atau pada posisi apa pun di layar. Ada urutan pelarian lain untuk menghapus (mengisi dengan kosong) bagian dari garis atau wilayah layar, dll.
Urutan mereka biasanya digunakan oleh aplikasi visual yang seperti vi
, lynx
, mutt
, dialog
di mana teks ditulis pada posisi yang sewenang-wenang di layar.
Sekarang, semua emulator terminal X11 dan beberapa yang bukan X11 lainnya seperti GNU screen
memungkinkan Anda memilih area layar untuk menempelkan salinan. Saat Anda memilih bagian dari apa yang Anda lihat di vi
editor, Anda tidak ingin menyalin semua urutan pelarian yang telah digunakan untuk menghasilkan output itu. Anda ingin memilih teks yang Anda lihat di sana.
Misalnya jika Anda menjalankan:
printf 'abC\rAC\bB\t\e[C\b\bD\n'
Yang mensimulasikan sesi editor tempat Anda masuk abC
, kembali ke awal, ganti ab
dengan AC
, C
dengan B
, pindah ke perhentian tab berikutnya, lalu satu kolom lagi ke kanan, lalu dua kolom ke kiri, lalu masuk D
.
Kamu melihat:
ABC D
Itu adalah,, ABC
celah 4 kolom dan D
.
Jika Anda memilihnya dengan mouse xterm
atau putty
, mereka akan menyimpan dalam seleksi ABC
, 4 karakter spasi dan D
, tidak abC<CR>AC<BS>B<Tab><Esc>[C<BS><BS>D
.
Apa yang berakhir dalam pemilihan adalah apa yang telah dikirim oleh printf
tetapi setelah diproses oleh driver terminal dan terminal emulator.
Untuk jenis transformasi lain, lihat <U+0065><U+0301>
( e
diikuti oleh aksen akut kombinasi) yang diubah menjadi <U+00E9>
( é
bentuk yang sudah dibuat sebelumnya) oleh xterm
.
Atau echo abc
yang akhirnya diterjemahkan ABC
oleh pengemudi terminal sebelum dikirim ke terminal setelah a stty olcuc
.
Sekarang,, <Tab>
like <LF>
adalah salah satu dari beberapa karakter kontrol yang sebenarnya kadang-kadang ditemukan dalam file teks (juga <CR>
dalam file teks MSDOS, dan kadang <FF>
- kadang untuk page break).
Jadi beberapa emulator terminal memilih untuk menyalinnya bila mungkin di copy-paste buffer untuk menjaga mereka (yang umumnya tidak kasus <CR>
atau <LF>
meskipun).
Misalnya, di terminal berbasis VTE seperti gnome-terminal
, Anda mungkin melihat bahwa, ketika Anda memilih output printf 'a\tb\n'
pada saluran kosong, gnome-terminal
sebenarnya menyimpan a\tb
dalam pemilihan X11, bukannya a
7 spasi dan b
.
Tapi untuk output printf 'a\t\bb\n'
, itu toko a
, 6 ruang dan b
, dan untuk printf 'a\r\tb\n'
, a
, 7 ruang dan b
.
Ada kasus lain di mana terminal akan mencoba untuk menyalin input yang sebenarnya, seperti ketika Anda memilih dua baris setelah berjalan di printf 'a \nb\n'
mana ruang trailing yang tidak terlihat itu akan dipertahankan. Atau ketika memilih dua garis tidak termasuk karakter LF ketika dua garis hasil dari pembungkus di margin yang tepat.
Sekarang, jika Anda ingin menyimpan output printf
ke dalam pilihan CLIPBOARD X11
, yang terbaik adalah melakukannya secara langsung seperti dengan:
printf 'foo\tbar\n' | xclip -sel c
Perhatikan bahwa ketika Anda menempelkannya di xterm
atau sebagian besar terminal lainnya, xterm
sebenarnya menggantikannya \n
dengan \r
karena itulah karakter yang xterm
dikirim ketika Anda menekan Enter(dan driver terminal dapat menerjemahkannya kembali ke \n
).