输入密码时如何使用退格字符作为退格?

use*_*335 3 bash password

我刚刚在某处看到了这段代码。
它允许用户输入他的密码并将其更改为星号/星号。
但它无法识别退格键。
代码认为退格键是密码的一部分。
我该怎么做才能让它识别退格键?
有人可以向我解释这段代码吗?
尤其是 IFS、读取选项和 $'\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"
Run Code Online (Sandbox Code Playgroud)

Dip*_*pto 6

尝试这个:

#!/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" 
Run Code Online (Sandbox Code Playgroud)

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

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

IFS=部分清除 IFS 变量,以确保您键入的任何空格或制表符都包含在密码中,而不是被read.