如何在输入密码时将退格符用作退格键?

如何在输入密码时将退格符用作退格键?

我刚刚在某处看到这段代码。
它允许用户输入密码并将其更改为星号/星号。
但它无法识别退格键。
代码认为退格键是密码的一部分。
我应该怎么做才能让它识别退格键?
有人能给我解释一下这段代码吗?
特别是 IFS、read 的选项和 $'\0'
谢谢!

这是代码。

\#!/bin/bash
unset password
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'\0' ]]
then
    break
fi
prompt='*'
password+="$char"
done
echo
echo "Done. Password=$password"

答案1

尝试这个:

#!/bin/bash
unset password
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char 
do
    if [[ $char == $'\0' ]];     then
        break
    fi
    if [[ $char == $'\177' ]];  then
        prompt=$'\b \b'
        password="${password%?}"
    else
        prompt='*'
        password+="$char"
    fi
done
echo " "
echo "Done. Password=$password" 

读取命令的选项为:
-p:提示字符串。
-r:不使用反斜杠作为转义字符。
-s:静默模式,不回显输入。
-n 1:要输入的字符数。

read0除非遇到,否则返回\0,并将用户输入的字符放入变量中char

IFS=部分清除 IFS 变量,这确保您输入的任何空格或制表符都包含在密码中,而不是被解析出来read

相关内容