如何在bash中使用换行符?

时间:2019-08-09 16:24:02

标签: linux bash linux-mint

我正在尝试制作一个循环,直到按下逃逸键为止,但是我在打印读取的消息时遇到了麻烦,因为如果除Enter键之外的任何键,它将继续在一行中打印

这是我的代码:

while : ; do
    read -n1 -r -p "Press esc key to continue...\n" key
    [[ $key != $'\e' ]] || break
done

它输出Press esc key to continue...\n

2 个答案:

答案 0 :(得分:1)

您可以使用$'...'字符串,就像已经用于检测转义字符一样:

while : ; do
    read -n1 -r -p $'Press esc key to continue...\n' key
    [[ $key != $'\e' ]] || break
done

根据man bash

  

$'string'形式的单词经过特殊处理。该单词扩展为字符串,并按ANSI C的规定替换反斜杠转义字符          标准。反斜杠转义顺序为\n\t\e等。

答案 1 :(得分:0)

我只需要重组一下!

1。)输入消息(“按esc键继续...”)不应包含嵌入式换行符。我假设此换行符应在用户按下转义后出现。

1a。)我们也不想在屏幕上弹出用户输入,因此在回显-n(没有换行符)后,请静静地读-s。

原文:

read -n1 -r -p "Press esc key to continue...\n" key

已修改:

echo -n "Press esc key to continue..."; read -s -n1 -r key

2。)现在,当用户按下ESC时,我相信您想启动换行并退出循环,因此只需在ESC按键上回显并中断即可。景气。

2a。)关于所有问题,但转义符会重新打印消息...好吧,如果用户未命中转义符,让我们进行回车,这样消息将打印在同一位置而不是在新的一行上!

原文:

[[ $key != $'\e' ]] || break

已修改:

if [[ $key == $'\e' ]];then echo;break; else echo -ne "\033[0K\r"; fi

完成版本:

   while : ; do
     echo -n "Press esc key to continue..."; read -s -n1 -r key
     if [[ $key == $'\e' ]];then echo;break; else echo -ne "\033[0K\r"; fi
   done

对其进行测试(一堆随机的NON-ESCAPE键): enter image description here

让我知道这是否对您有用!