사용자 입력을 while 루프 조건으로 사용하는 방법

사용자 입력을 while 루프 조건으로 사용하는 방법

Bash에서 이 작업을 수행할 수 있습니다.

while read -n1 -r -p "choose [y]es|[n]o"
do
    if [[ $REPLY == q ]];
    then
        break;
    else
        #whatever
    fi
done

이것은 작동하지만 약간 중복되는 것 같습니다. 이렇게 할 수 있습니까?

while [[ `read -n1 -r -p "choose [y]es|[n]o"` != q ]]
do
    #whatever
done

답변1

read반환 코드 (null이 아닌 유효한 입력을 받으면 0임) 를 사용할 수 없으며 해당 출력을 사용할 수 없습니다( read아무 것도 인쇄되지 않음). 그러나 while 루프의 조건부 부분에 여러 명령을 넣을 수 있습니다. while 루프의 조건은 원하는 만큼 복잡할 수 있습니다.

while IFS= read -n1 -r -p "choose [y]es|[n]o" && [[ $REPLY != q ]]; do
  case $REPLY in
    y) echo "Yes";;
    n) echo "No";;
    *) echo "What?";;
  esac
done

q(입력이 이거나 파일 끝 조건이 감지되면 루프를 종료합니다.)

답변2

간단한 읽기 및 인터럽트를 통해 구현됨

while read release; do
 if [ "$release" == "07" ]; then
        break
 else
        echo "Is that current release? e.g: 05. Try again!"
        continue
 fi
done

관련 정보