では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が右に移動し、消去されます(期待どおりにスペース文字が書き込まれます)。したがって、ペンダントは\bASCIIよりも新しいものでなければなりませんでした。最も近代的な端末では、それは実際の文字列です:<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文字が含まれません。
ここで、の出力をprintfCLIPBOARD X11selectに保存する場合は、次のように直接実行することをお勧めします。
printf 'foo\tbar\n' | xclip -sel c
あなたがいることを貼り付けることを注意xtermまたは他のほとんどの端末、xterm実際にその置き換え\nと\rそれが文字だからxterm、あなたが押したときに送信Enter(と端末ドライバがバックにそれを翻訳することができます\n)。