공백(탭 또는 "")만 포함된 문자열을 테스트하시겠습니까? [복사]

공백(탭 또는 "")만 포함된 문자열을 테스트하시겠습니까? [복사]

아래 코드가 작동하지 않습니다.

stringZ="    "

if [[ "$stringZ" == ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi 

결과:

string is not blank   # wrong

이것을 어떻게 테스트할 수 있나요?

답변1

특정 코드가 필요 하지 않습니다 bash.

case $string in
  (*[![:blank:]]*) echo "string is not blank";;
  ("") echo "string is empty";;
  (*) echo "string is blank"
esac

답변2

에서 man bash:

== 및 !=와 우선순위가 동일한 추가 이항 연산자 =~를 사용할 수도 있습니다. 사용되면 연산자 오른쪽에 있는 문자열은 확장 정규식으로 처리되고 그에 따라 일치됩니다(regex(3)에서와 같이).

따라서 정규식 일치 연산자는 다음과 같아야 합니다 =~.

if [[ "$stringZ" =~ ^[[:blank:]][[:blank:]]*$ ]];then
  echo  string is  blank
else
  echo string is not blank
fi

+정규식의 장황함을 줄이기 위해 수량자(이전 엔터티를 1회 이상 나타냄)를 사용할 수 있습니다.

if [[ "$stringZ" =~ ^[[:blank:]]+$ ]]; then

관련 정보