一行読みの確認[閉じる]

一行読みの確認[閉じる]

私はこれreadをしました:

read -p "Please enter your name:" username

一行でユーザー名を確認するには?

1行で通常の方法で可能でない場合は、Bash関数を変数に入れるのが良い解決策でしょうか?


名前は単なる例であり、パスワードやその他の一般的な形式の値にすることができます。

ここで検証とは、ユーザーに名前を2回入力するように要求し、2つの値が同じであることを確認することを意味します。

答え1

ユーザーが同じ内容を2回入力(またはコピーして貼り付け...)するのは、通常2回の呼び出し、read2つの変数、および比較によって行われます。

read -p "Please enter foo" bar1
read -p "Please enter foo again" bar2
if [ "$bar1" != "$bar2" ]; then
   echo >&2 "foos did not match"
   exit 1
fi

これはwhile、ループ変数と条件変数を使用して一致するまでプロンプトと確認を繰り返すか、入力プロンプトが多い場合は関数呼び出しで抽象化できます。

答え2

thrigの回答を拡張し、要求された機能を含めるには、次のようにします。

機能

enter_thing () {
    unset matched
    while [[ -z "$matched" ]]; do
        read -rp "Please enter $@: " thing1
        read -rp "Please re-enter $@: " thing2
        if [[ "$thing1" == "$thing2" ]]; then
            matched=1
        else
            echo "Error! Input does not match" >&2
        fi
    done
    echo "$thing2"
}

スクリプトでは、次のように呼び出すことができます。

username=$(enter_thing "name")
email=$(enter_thing "email")
password=$(enter_thing "password")

関連情報