함수 내에서 사용자 응답을 확인하고 유효한 응답을 제공한 후 기본 프로그램으로 돌아가려면 어떻게 해야 합니까?

함수 내에서 사용자 응답을 확인하고 유효한 응답을 제공한 후 기본 프로그램으로 돌아가려면 어떻게 해야 합니까?

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

두 개의 루프를 가질 필요는 없습니다 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]: "

답변2

당신이 찾고 있는 명령 단어는 서브루틴이 성공을 반환할 때 루프를 종료하는 것입니다 break:while true

valcheck "AaPp" && break

참고로 printf프롬프트 명령을 루프 내로 이동할 수 있습니다. 응답이 "a" 또는 "p"가 아닌 경우 사용자가 원하는 답변을 다시 묻는 것이 좋습니다.

관련 정보