사용자가 작성한 내용이 올바른지 확인하거나 확인하는 방법이 있습니까 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
이에 대한 함수를 정의할 수 있습니다.
또는 :zsh
bash
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
.