Case 문에서 캐리지 리턴/라인 피드를 캡처하는 방법

Case 문에서 캐리지 리턴/라인 피드를 캡처하는 방법

성공하지 못하고 다음을 시도했지만 문서를 찾을 수 없습니다.

read Option
case $Option in
    [1] ) echo "1" ;;
    [2] ) echo "2" ;;
    [$'\n'] ) echo "LF" ;;
    [0] ) exit ;;
    * ) echo "Invalid input" ;;
esac

그러나 다음 방법이 작동합니다.

$ x="                                         
> "
$ if [ "$x" = $'\n' ]; then echo "newline"; fi
newline

답변1

개행 없이 입력의 한 줄만 읽혀 지므로 read빈 문자열만 확인하려고 합니다.

read Option
case $Option in
    1 ) echo "1" ;;
    2 ) echo "2" ;;
    "" ) echo "LF" ;;
    0 ) exit ;;
    * ) echo "Invalid input" ;;
esac

[1]( 1다른 단일 문자 클래스와 유사하게) 동일한 문자열을 패턴과 일치시킵니다.

답변2

read벗겨드립니다. 사례 진술 자체가 유효합니다.

#read Option
Option='
'
case "$Option" in
    [1] ) echo "1" ;;
    [2] ) echo "2" ;;
    [$'\n'] ) echo "LF" ;;
    [0] ) exit ;;
    * ) echo "Invalid input" ;;
esac
#Outputs: LF

답변3

case비록 외부 프로그램(예 : sed.

아래 예에서 모든 공백과 인쇄할 수 없는 문자는 공백과 마찬가지로 유효하지 않으므로 모두 리터럴 ""로 바꿨습니다.

case "${Option//[^[:print:]]/ }" in
*\ *)
    # Handle error
    ;;
...
esac

관련 정보