Shell

為什麼 echo abc^H 不只列印 ab

  • June 3, 2019

我記得,^H意思是Backspace。我通過按CTRL+V,生成它CTRL+H

所以^H應該刪除最後一個字元,因為它和它一樣Backspace,它應該就像我Backspace在這個位置按下一樣。

為什麼echo abc^H保持的輸出abc而不是ab

backspace只是向後移動游標。

backspace(或delete取決於配置的任何字元)僅在滿足以下條件時刪除最後列印的字元:

  • 它是在鍵盤上輸入的,而不是像echo您的範例中那樣的命令輸出
  • 終端設備處於煮熟模式(通常情況下)

如果要擦除c範例中的 ,則需要用另一個字元覆蓋它,例如:

echo "abc^H "

通過鍵入 ^V^H,您是在字元串中插入退格程式碼,而不是發出退格命令。^H 不需要是破壞性的退格;一些軟體用它來套印。

事後思考:echo(1) 的創建者推斷,如果您鍵入 ^V 和控制程式碼,您這樣做是因為您想要另一個程序而不是 echo(1) 來解析控制程式碼。在 Ctrl-H 的情況下,echo(1) 將 0x08 放在輸出字元串中,並用插入符號和 H 顯示。如果字元串被重定向到在其 INPUT 中將 0x08 解析為破壞性退格的內容,您可能會得到期望的結果。

引用自:https://unix.stackexchange.com/questions/37771