Shell為什麼
為什麼 echo abc^H
不只列印 ab
?
我記得,
^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 解析為破壞性退格的內容,您可能會得到期望的結果。