읽은 값 확인

읽은 값 확인

사용자가 작성한 내용이 올바른지 확인하거나 확인하는 방법이 있습니까 read?

  • 예를 들어, 사용자가 "Hello world!"를 쓰고 싶었지만 실수로 "Hello world@"를 썼습니다.

  • 이는 이메일/전화 필드에 대한 문의 양식 유효성 검사와 매우 유사합니다.

읽는 동안 "입력을 다시 입력하세요"와 같은 메시지를 사용자에게 표시하는 방법이 있나요?

에서는 그런 옵션을 찾지 못했습니다 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.

관련 정보