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
これは注文とは何の関係もありませんecho
。cat
または別のプログラムを使用して出力を作成すると、printf
同じ動作を見ることができます。これはあなたの一面です端末。
この側面は端末ごとに異なる場合があります。端末の場合、terminfoデータベースにはtermcapauto_left_margin
という機能がある場合とない場合がありますbw
。これは、一部の端末と同様に、左マージンを囲むためにバックスペースキーを使用できるかどうかをプログラムに通知します。自動左マージンを持つ端末を使用すると、前の行に表示されc
ます。
タブを再プログラミングすると、よりさまざまな動作を見ることができます。
ところで、ワを組み合わせるTAB
と興味深いことが起こります。BS
termcap マニュアルの 25 年前の警告は、自動左マージン機能が報告されない場合、またはカーソルが最初の行にある場合、バックスペースが余白を超えることです。System V インターフェースの定義FreeBSDのマニュアルによると、これは一見すると奇妙で過度に慎重に見えるかもしれません。持つ既知の端末制御コード処理はこの操作を完全に正しく実行しません。
追加読書
- Zed M. Ben Halim、Eric S. Raymond、Thomas E. Dickey. 用語情報。 FreeBSD のマニュアルページ。
- https://superuser.com/a/711019/38062
- ジョナサン・ドボイン・ポラード(2001)。Windows NT 4/NT 2000/NT XP の CSRSS バックスペースのバグ。。一般的な答え。
答え2
エコは始まったところに戻ることはできません。バックスペースキーを数回押しても出力した内容をすべて消去すると、元の位置にそのまま残ります。そのため、バックスペースを数回押しても常に「c」文字が表示されます。