Bash 케이스 로직에서 개행 문자와 공백이 아닌 문자를 감지하는 방법은 무엇입니까?

Bash 케이스 로직에서 개행 문자와 공백이 아닌 문자를 감지하는 방법은 무엇입니까?

저는 $message에 공백이 아닌 문자가 있는지 감지하기 위해 bash 스크립트를 작성하고 대소문자 논리를 사용하고 있지만 개행 문자가 아닌 문자도 감지하고 싶습니다. 때로는 내 스크립트의 $message 변수가 개행과 같고 때로는 true를 반환하기도 합니다.

공백이 아닌 조건과 개행이 아닌 조건을 결합하는 방법은 무엇입니까?

이와 같이?[!\ !\N]

이것이 내가 지금까지 가지고 있는 것입니다:

  7 case $message in
  8     *[!\ ]*) # contains non-space
  9         messagex='``` '"$message"' ```' ;;
 10     *)       # contains nothing or only spaces
 11         messagex=
 12 esac

답변1

case $message in
  (*[!' 
 ']*) : contains characters other space and newline
esac

또는:

case $message in
  (*[!"$(printf '\n ')"]*) : contains characters other space and newline
esac

또는 ksh93 스타일의 $'...'특수 따옴표를 사용하십시오( 에는 없음 sh).

case $message in
  (*[!$' \n']*) : contains characters other space and newline
esac

[:space:]또는 POSIX 문자 클래스를 사용하여 TAB, SPC, CR, NL 등 모든 공백을 일치시킬 수 있습니다.

case $message in
  (*[![:space:]]*) : contains non-whitespace characters
esac

관련 정보