문자열에 인증 된 세트의 문자 만 포함되어 있는지 확인하는 쉬운 방법은 인증되지 않은 문자가 있는지 테스트하는 것입니다. 따라서 문자열에 공백 만 포함되어 있는지 테스트하는 대신 문자열에 공백 이외의 문자가 포함되어 있는지 테스트하십시오. bash, ksh 또는 zsh에서 :
if [[ $param = *[!\ ]* ]]; then
echo "\$param contains characters other than space"
else
echo "\$param consists of spaces only"
fi
“공백으로 만 구성”에는 빈 (또는 설정되지 않은) 변수의 경우가 포함됩니다.
공백 문자를 테스트 할 수 있습니다. [[ $param = *[^[:space:]]* ]]
로케일 설정 또는 공백 [[ $param = *[$' \t\n']* ]]
, 탭 또는 줄 바꿈과 같이 테스트 하려는 공백 문자 목록을 사용하는 데 사용 하십시오 .
=
내부 [[ … ]]
가 있는 패턴과 문자열을 일치시키는 것은 ksh 확장자입니다 (bash 및 zsh에도 있음). Bourne / POSIX 스타일에서 case
구문을 사용하여 문자열을 패턴과 일치 시킬 수 있습니다 . 표준 쉘 패턴 은 대부분의 정규 표현식 구문에서와 !
달리 문자 세트를 무효화하는 데 사용 됩니다 ^
.
case "$param" in
*[!\ ]*) echo "\$param contains characters other than space";;
*) echo "\$param consists of spaces only";;
esac
공백 문자를 테스트하기 위해 $'…'
구문은 ksh / bash / zsh에만 적용됩니다. 스크립트에 문자를 문자 그대로 삽입하거나 (백 슬래시 + 줄 바꿈이 아무 것도 확장되지 않기 때문에 줄 바꿈은 따옴표 안에 들어가야합니다.)
whitespace=$(printf '\n\t ')
case "$param" in
*[!$whitespace]*) echo "\$param contains non-whitespace characters";;
*) echo "\$param consists of whitespace only";;
esac
man test
:-z STRING - the length of STRING is zero
. 의 모든 공백을 제거$param
하려면 다음을 사용하십시오.${param// /}