有没有办法验证或确认用户所写的内容是否正确read
?
例如,用户想要写“Hello world!”但错误地写了“Hello world@”。
这与电子邮件/电话字段的联系表单验证非常相似。
有没有办法在阅读时提示用户“请重新输入输入”之类的内容?
我在 中没有找到这样的选项man read
。
注意:输入的是密码,因此我不想打印它或将其与已有的字符串进行比较。
答案1
有了bash
shell,你总是可以做
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=
and -r
,如果用户输入" \/ery secret "
,"/ery secret"
将存储在 中$password
。