ではprintf '%s\t%s\n' foo bar
、printf
出力を行いますfoo<TAB>bar<LF>
。
f
、o
、b
、a
およびr
シングル幅のグラフィカルな文字です。
これらの文字を受信すると、端末は対応するグリフを表示し、画面の右端(元のテレタイプライターの紙)に既に達していない限り、カーソルを1列右に移動します。画面の左端に戻る(折り返す)か、端末とその構成方法に応じて文字を破棄します。
<Tab>
と<LF>
2つの制御文字です。<LF>
(別名改行)は、Unixテキストの行区切り文字ですが、ターミナルの場合は、改行するだけです(カーソルを1つ下に移動します)。そのため、カーネルのターミナルドライバーは実際にそれを<CR>
(画面の左端に戻る)、<LF>
(カーソルを下に)に変換します(stty onlcr
通常はデフォルトでオンです)。
<Tab>
ギャップを空白で埋めることなく、カーソルを次のタブストップ(ほとんどの端末ではデフォルトで8ポジション離れていますが、どこにでも設定できるように構成できます)に移動するように端末に指示します。
したがって、カーソルが空の行の先頭にあるときに、これらの文字が8列ごとにタブストップでターミナルに送信されると、次のようになります。
foo bar
画面のその行に印刷されます。を含む行の3番目の位置にカーソルがあるときに送信された場合は、次のようになりますxxxxyyyyzzzz
。
xxfooyyybarz
集計をサポートしていない端末では、これらのタブを一連のスペースに変換するように端末ドライバを構成できます。(stty tab3
)。
SPC文字は、元のテレタイプライターではカーソルを右に移動し、バックスペース(\b
)を使用すると左に移動します。現在の端末では、SPCが右に移動し、消去されます(期待どおりにスペース文字が書き込まれます)。したがって、ペンダントは\b
ASCIIよりも新しいものでなければなりませんでした。最も近代的な端末では、それは実際の文字列です:<Esc>
、[
、C
。
n
文字を左、右、上、下、または画面上の任意の位置に移動するためのエスケープシーケンスがあります。画面の行や領域の一部を消去(空白で埋める)するためのエスケープシーケンスは他にもあります。
これらの配列は、典型的には、のような視覚的なアプリケーションで使用されvi
、lynx
、mutt
、dialog
テキストが画面上の任意の位置に書き込まれます。
現在、すべてのX11端末エミュレータと、GNUのような他のいくつかの非X11エミュレータscreen
では、画面の領域をコピーして貼り付けることができます。vi
エディターに表示されている部分を選択する場合、その出力の生成に使用されたすべてのエスケープシーケンスをコピーする必要はありません。そこに表示されているテキストを選択します。
たとえば、次を実行した場合:
printf 'abC\rAC\bB\t\e[C\b\bD\n'
これは、を入力abC
し、最初に戻り、と置き換え、と置き換え、次のタブ位置に移動し、次に右に1列、次に左に2列移動しab
てAC
、C
と入力するエディターセッションをシミュレートしB
ますD
。
分かりますか:
ABC D
つまりABC
、4列のギャップとD
です。
あなたがマウスでそれを選択した場合xterm
やputty
、それらを選択して保存するABC
、4つの空白文字をしてD
、ではありませんabC<CR>AC<BS>B<Tab><Esc>[C<BS><BS>D
。
printf
最終的に選択されるのは、送信されたものですが、ターミナルドライバーとターミナルエミュレーターの両方によって後処理されます。
他の種類の変換については、によって(前に合成された形式)に変更された<U+0065><U+0301>
(e
その後に結合する急性アクセントが続く)を参照してください。<U+00E9>
é
xterm
またはecho abc
、それはABC
、ターミナルドライバーによって変換されてから、ターミナルに送信されstty olcuc
ます。
さて、は<Tab>
、<LF>
テキストファイル(<CR>
MSDOSテキストファイル、および<FF>
改ページ用)に実際に見つかるいくつかの制御文字の1つです。
そのため、一部のターミナルエミュレータは、可能な場合はコピーアンドペーストバッファにコピーしてそれらを保持することを選択します(通常、そうではあり<CR>
ませ<LF>
ん)。
たとえば、のようなVTEベースの端末gnome-terminal
でprintf 'a\tb\n'
は、空の行での出力を選択すると、gnome-terminal
実際a\tb
にはa
、7スペースとの代わりにX11選択に格納されることがわかりますb
。
しかし、の出力のprintf 'a\t\bb\n'
場合はa
、6つのスペースとが格納され、のb
場合printf 'a\r\tb\n'
はa
、7つのスペースとが格納されますb
。
端末が実際の入力をコピーしようとするケースは他にもあります。たとえば、実行後に2行を選択するprintf 'a \nb\n'
と、見えない後続スペースが保持されます。または、2つの行を選択したときに、2つの行が右マージンでの折り返しの結果である場合、LF文字が含まれません。
ここで、の出力をprintf
CLIPBOARD X11
selectに保存する場合は、次のように直接実行することをお勧めします。
printf 'foo\tbar\n' | xclip -sel c
あなたがいることを貼り付けることを注意xterm
または他のほとんどの端末、xterm
実際にその置き換え\n
と\r
それが文字だからxterm
、あなたが押したときに送信Enter(と端末ドライバがバックにそれを翻訳することができます\n
)。