(错误变量:第 36 行)请帮忙!

(错误变量:第 36 行)请帮忙!

我在这里做错了什么?因为当我运行脚本并在设置变量后停止它时,它说我有一个坏变量

qmail.script: 36: read: : bad variable name. 

非常感谢您的帮助。

unset PASSWORD
unset CHARCOUNT
echo
echo -n "Please Enter a Password For VqAdmin, Roundcube and QmailAdmin.
Password: "
stty echo
CHARCOUNT=0
while IFS= read "$PROMPT" -p -r -s -n 
do
    #Enter - accept password
    if [[ $CHAR == $'\0' ]] ; then
        break
    fi
    #Backspace
    if [[ $CHAR == $'\177' ]] ; then
        if [ $CHARCOUNT -gt 0 ] ; then
            CHARCOUNT=$((CHARCOUNT-1))
            PROMPT=$'\b \b'
            PASSWORD="${PASSWORD%?}"
        else
            PROMPT=''
        fi
    else
        CHARCOUNT=$((CHARCOUNT+1))
        PROMPT='*'
        PASSWORD=$CHAR
    fi
done
stty echo

答案1

我认为您没有展示全部代码,因此line 36实际上显示的是read您发布的代码片段中的语句。

这个read说法是错误的。恕我直言,你的意思是

read -p "$PROMPT" -r -s -n1 CHAR
  • $PROMPT是的参数-p,在输入时打印“*”或不打印任何内容。
  • -n也需要一个参数,告诉一次读取多少个字符。
  • 该变量$CHAR稍后会被使用,但不会被赋值read

也只$PASSWORD包含最后一个字符,因为你忘记连接了:PASSWORD=$CHAR应该是

PASSWORD+=$CHAR

或者

PASSWORD=${PASSWORD}${CHAR}

经过这些修正,代码就可以按照我认为它应该的方式运行:显示“带星号”的密码提示。


根据此处的请求,提供完整且更正的代码片段

unset PASSWORD
unset CHARCOUNT
echo
echo -n "Please Enter a Password For VqAdmin, Roundcube and QmailAdmin.
Password: "
stty echo
CHARCOUNT=0
while IFS= read -p "$PROMPT" -r -s -n1 CHAR 
do
    #Enter - accept password
    if [[ $CHAR == $'\0' ]] ; then
        break
    fi
    #Backspace
    if [[ $CHAR == $'\177' ]] ; then
        if [ $CHARCOUNT -gt 0 ] ; then
            CHARCOUNT=$((CHARCOUNT-1))
            PROMPT=$'\b \b'
            PASSWORD="${PASSWORD%?}"
        else
            PROMPT=''
        fi
    else
        CHARCOUNT=$((CHARCOUNT+1))
        PROMPT='*'
        PASSWORD+=$CHAR
    fi
done

从你的评论来看,这段代码不是你自己写的(全部)(?),理解起来有些困难。我不会逐行向你解释它的作用。抱歉。我建议你在网上阅读,如果有问题的话再回来。关于read它的选项的一个好的解释是给出

有关 bash 编程的一般介绍可以在这里找到

相关内容