読み取った値の確認

読み取った値の確認

ユーザーが作成した内容が正しいことを確認または確認する方法はありますかread

  • たとえば、ユーザーが「Hello world!」を書きたかったのですが、誤って「Hello world@」を書きました。

  • これは、Eメール/電話フィールドの問い合わせフォームの検証と非常によく似ています。

読みながら「入力を再入力してください」などのメッセージをユーザーに表示する方法はありますか?

ではそのようなオプションが見つかりませんでしたman read


注:入力はパスワードなので、印刷したり既存の文字列と比較したくありません。

答え1

シェルを使えばbashいつでもできる

FOO=a
BAR=b
prompt="Please enter value twice for validation"
while [[ "$FOO" != "$BAR" ]]; do
    echo -e $prompt
    read -s -p "Enter value: " FOO
    read -s -p "Retype to validate: " BAR
    prompt="\nUups, please try again"
done
unset -v BAR
# do whatever you need to do with FOO
unset -v FOO

read使用されたオプション:

  • -sサイレントモード。入力が端末から来る場合、文字はエコーされません。
  • -p prompt入力を読み取ろうとする前に、末尾の改行なしで標準エラープロンプトを表示します。

答え2

これに関数を定義できます。

またはzshbash

blind_read_and_confirm() {
  # args: <prompt> <variable-name>
  local _confirm_
  until
    printf >&2 %s "$1"
    IFS= read -rs "${2-REPLY}" || return
    printf >&2 "\n%*s" "${#1}" 'and again: '
    IFS= read -rs _confirm_ || return
    eval '[ "${'"${2-REPLY}"'}" = "$_confirm_" ]'
  do
    printf >&2 "\nEntries differ, please try again.\n"
  done
  printf '\n'
}

たとえば、次のように使用されます。

blind_read_and_confirm "Please choose a password: " password || exit

printf 'You entered a %s character password.\n' "${#password}"

IFS=と がないと、-rユーザーが を入力すると" \/ery secret "保存"/ery secret"されます$password

関連情報