如何实现输出提示、读取用户输入并在同一行输出结果?
解决方法:让输入与结果在同一行输出
问题的核心在于,当你用read命令读取用户输入时,用户按下回车确认后,终端会自动输出一个换行符,导致后续的echo内容跑到新一行去了。要实现输入字符串和结果在同一行显示,我们可以通过控制光标位置或者重新输出整行内容来搞定。
方法1:用终端控制命令调整光标位置
这个方法先把光标拉回输入所在的行,再定位到输入内容的末尾,接着输出结果:
# 定义提示符,方便后续计算长度 prompt="Enter the search string: " # 输出提示符,末尾不换行 echo -n "$prompt" # 读取用户输入的字符串 read string1 # 光标上移1行,回到输入内容所在的行 tput cuu 1 # 光标向右移动提示符的长度,精准定位到输入内容的末尾 tput cuf ${#prompt} # 输出结果,此时会紧跟在输入的字符串后面 echo " $string1 was found $count times in our database"
方法2:用回车符\r重新输出整行内容
这个方法通过\r(回车符)让光标回到行首,然后重新输出包含输入内容和结果的完整行,直接覆盖原来的输入行:
echo -n "Enter the search string: "; read string1; echo -ne "\rEnter the search string: $string1 $string1 was found $count times in our database\n"
简单解释:
\r会把光标拽回当前行的开头-ne参数让echo解析转义字符,并且不自动添加换行(最后手动加\n来结束这一行)- 重新输出的内容会覆盖原来的提示符和输入内容,最终呈现你想要的单行效果
方法3:用printf简化格式化输出
用printf替代echo,能更灵活地控制输出格式,可读性也更强:
prompt="Enter the search string: " printf "%s" "$prompt" read string1 printf "\r%s%s %s was found %d times in our database\n" "$prompt" "$string1" "$string1" "$count"
这个思路和方法2一致,只是用printf来处理格式化输出,适合需要更精细控制内容的场景。
内容的提问来源于stack exchange,提问作者Nike
相关产品推荐
相关产品推荐

