我刚刚在某处看到这段代码。
它允许用户输入密码并将其更改为星号/星号。
但它无法识别退格键。
代码认为退格键是密码的一部分。
我应该怎么做才能让它识别退格键?
有人能给我解释一下这段代码吗?
特别是 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:要输入的字符数。
read
0
除非遇到,否则返回\0
,并将用户输入的字符放入变量中char
。
该IFS=
部分清除 IFS 变量,这确保您输入的任何空格或制表符都包含在密码中,而不是被解析出来read
。