(不正な変数: 行 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

あなたのコメントから判断すると、あなたはこのコードを(完全に)自分で書いたわけではないようです(?)ので、理解するのに苦労しています。それが何をするのかを1行ずつ説明することはしません。申し訳ありません。Webで調べて、何か疑問が生じたら具体的な質問をして戻ってくることをお勧めします。readとそのオプションの適切な説明は、たとえば次のとおりです。ここで与えられた

bashプログラミングの一般的な入門書は、例えば以下にあります。

関連情報