バックスペースキーでエコ

バックスペースキーでエコ

bashでこれが起こる理由を見つけようとしています。

  • まあ、簡単です。

    $ echo -e 'a\txy\bc'
    a   xc
    
  • まあ、簡単です。

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\bc'
    ac      xy
    
  • まあ、簡単です。

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\b\bc'
    c       xy
    
  • さて、なぜcまだ左端が落ちていないのですか?

    $ echo -e 'a\txy\b\b\b\b\b\b\b\b\b\b\b\bc'
    c       xy
    

私の予想結果は次のとおりです。

<a tab>xy

しかし、明らかにそうではありません。何が起こるのか知っている人はいますか?ありがとうございます。

答え1

これは注文とは何の関係もありませんechocatまたは別のプログラムを使用して出力を作成すると、printf同じ動作を見ることができます。これはあなたの一面です端末

この側面は端末ごとに異なる場合があります。端末の場合、terminfoデータベースにはtermcapauto_left_marginという機能がある場合とない場合がありますbw。これは、一部の端末と同様に、左マージンを囲むためにバックスペースキーを使用できるかどうかをプログラムに通知します。自動左マージンを持つ端末を使用すると、前の行に表示されcます。

タブを再プログラミングすると、よりさまざまな動作を見ることができます。

ところで、ワを組み合わせるTABと興味深いことが起こります。BStermcap マニュアルの 25 年前の警告は、自動左マージン機能が報告されない場合、またはカーソルが最初の行にある場合、バックスペースが余白を超えることです。System V インターフェースの定義FreeBSDのマニュアルによると、これは一見すると奇妙で過度に慎重に見えるかもしれません。持つ既知の端末制御コード処理はこの操作を完全に正しく実行しません。

追加読書

答え2

エコは始まったところに戻ることはできません。バックスペースキーを数回押しても出力した内容をすべて消去すると、元の位置にそのまま残ります。そのため、バックスペースを数回押しても常に「c」文字が表示されます。

関連情報