【发布时间】:2021-10-23 22:07:22
【问题描述】:
我在我的脚本中使用 Bash 和 read 命令来输入姓氏和名字。姓氏和名字描述在输出中的同一行。现在在read 中有一个-e 参数可以使用backspace 键执行删除,但是,执行删除时将删除沿此行的所有字符。有什么办法可以预防吗?
#!/bin/bash
clear
tput cup 0 25
echo -n "First Name: JOHN"
tput cup 0 0
echo -n "Last Name: " $lastname
read -e -n10 lastname
【问题讨论】:
-
不清楚你在问什么。如果您想从一行中读取两个值,请使用两个变量:
read -r firstname lastname(其中-r基本上总是一个好主意,除非您特别需要反斜杠周围的奇怪逻辑行为)。 -
我避免使用 -r 参数,因为它不能限制您输入的字符。就我而言,我使用 -n10 来限制为 10 个字符。现在,给定控制台中显示的名字:JOHN 作为输出以及同一行上的姓氏:$lastname,执行 $lastname 退格删除时将删除名字:JOHN。
-
您在这里使用Readline 的哪些功能?
-
@Armali 我没有使用 Readline 命令行编辑设置任何内容,我相信它使用默认的 Emacs 编辑器,但阅读后我尝试在脚本中添加 set -o vi 但仍然同样的结果。
-
是否可以在声明的字符数内开始编辑行?假设 -n10 和退格将从第 10 个字符开始向左移动直到第 1 个字符,而不是整个单行?