echoで使用される-eスイッチを使用すると、次のようにエスケープシーケンスを理解できます。
[root@localhost~]# echo -e 'hello\b\bhi'
helhi
[root@localhost~]#
しかし、次のコードスニペットではエスケープシーケンスが省略されているようです。
[root@localhost~]# echo -e 'hello\b\b'
hello
[root@localhost~]#
上記のコードスニペットの動作を理解するのに役立つ人はいますか?
上記と同じコードスニペットが「-n」スイッチで実行されると機能します。 (もちろん、-nアクションを使用すると改行文字が削除されます)
[root@localhost~]# echo -n -e 'hello\b\b'
hel[root@localhost~]#
挨拶
答え1
バックスペース文字(echo -e '\b'
)はカーソルを左に移動しますが、表示される内容を変更しません。したがってecho -e 'hello\b\b'
、表示するには、hello
単語の末尾にカーソルを置き、カーソルを左に2位置移動し(echo
改行を追加しないため-n
)、カーソルを次の行の先頭に移動します。これは視覚的に区別できませんecho hello
。
実際の動作を見る:
for c in h e l l o '\b' '\b' '\n'; do
echo -e "$c"; sleep 1
done
PSルートなどの実験をしないでください。ルートで自分の足に銃を撃つと、通常のアカウントを使用するよりも多くのダメージを与える可能性があります。