(錯誤變數:第 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 程式設計的一般介紹可以在以下位置找到:

相關內容