関数内でユーザーの応答を確認し、有効な応答を提供してから基本プログラムに戻るにはどうすればよいですか?

関数内でユーザーの応答を確認し、有効な応答を提供してから基本プログラムに戻るにはどうすればよいですか?

A、B、Y、いいえなどの応答が必要な一連のユーザーエントリを確認する必要があります。入力した値が許可された応答セットと一致することを確認したいと思います。それぞれの要件に応じて、各検証を実行する関数を作成します。機能がうまくいくようですが、応答がうまくいけばメインループから出ることはできません。

#!/usr/bin/bash
function valcheck()
{
while true;
do
  if [[ "$response" =~ [$1] ]]
  then
    echo "Acceptible response"
    return 0
  else
    echo "Invalid response!"
    continue
  fi
  done
}

#call function
printf "What is the response [A/P]: "
while true; do
  read -r response
  valcheck "AaPp"
done

ベストアンサー1

2つのループを持つ必要はありませんwhile。さらに、私はwhile trueループが好きではありません。ユーザー入力の読み取りと検証を単一の関数に減らすことができます。

#!/usr/bin/bash

valcheck() {
    while
        printf '%s' "$2"
        read -r response
    do
        if
            [[ "$response" =~ ^[$1]$ ]]
        then
            echo "Acceptable response!"
            break
        else
            echo "Invalid response!"
        fi
    done
}

valcheck "AaPp" "What is the response [A/P]: "

おすすめ記事