ユーザーが作成した内容が正しいことを確認または確認する方法はありますか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
これに関数を定義できます。
または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
。