programing

셸 스크립트에서 문자열이 비어 있지 않거나 공백이 아닌지 확인

jooyons 2023. 5. 20. 10:45
반응형

셸 스크립트에서 문자열이 비어 있지 않거나 공백이 아닌지 확인

문자열이 공백도 비어 있지 않은지 확인하기 위해 다음 셸 스크립트를 실행하려고 합니다.하지만 언급된 3개의 문자열에 대해서는 모두 동일한 출력을 받고 있습니다."[] 구문도 사용해봤지만 소용이 없었습니다.

내 코드는 다음과 같습니다.

str="Hello World"
str2=" "
str3=""

if [ ! -z "$str" -a "$str"!=" " ]; then
        echo "Str is not null or space"
fi

if [ ! -z "$str2" -a "$str2"!=" " ]; then
        echo "Str2 is not null or space"
fi

if [ ! -z "$str3" -a "$str3"!=" " ]; then
        echo "Str3 is not null or space"
fi

다음과 같은 출력을 받고 있습니다.

# ./checkCond.sh 
Str is not null or space
Str2 is not null or space

양쪽에 공간이 필요합니다.!=코드를 다음으로 변경:

str="Hello World"
str2=" "
str3=""

if [ ! -z "$str" -a "$str" != " " ]; then
        echo "Str is not null or space"
fi

if [ ! -z "$str2" -a "$str2" != " " ]; then
        echo "Str2 is not null or space"
fi

if [ ! -z "$str3" -a "$str3" != " " ]; then
        echo "Str3 is not null or space"
fi

셸의 빈 문자열 확인용

if [ "$str" == "" ];then
   echo NULL
fi

OR

if [ ! "$str" ];then
   echo NULL
fi

문자열에 공백이 아닌 다른 항목이 있는지에 대한 또 다른 빠른 테스트입니다.

if [[ -n "${str// /}" ]]; then
    echo "It is not empty!"
fi

"-n"은 길이가 0이 아닌 문자열을 의미합니다.

그런 다음 처음 두 슬래시는 다음과 같은 모든 것과 일치한다는 것을 의미합니다.그런 다음 세 번째 슬래시 뒤에 대체(빈) 문자열이 오고 "}"로 닫힙니다.일반적인 정규식 구문과의 차이점에 유의하십시오.

bash스크립팅의 문자열 조작에 대한 자세한 내용은 여기를 참조하십시오.

단일 공간뿐만 아니라 빈 공간의 양을 확인해야 하는 경우 다음 작업을 수행할 수 있습니다.

추가 공백 문자열을 제거하려면(중간 공백을 한 공간으로 압축):

trimmed=`echo -- $original`

--다음의 경우를 보장합니다.$original에코로 이해되는 스위치를 포함하며, 여전히 에코로 인식되는 일반 인수로 간주됩니다.또한 넣지 않는 것이 중요합니다.""주위에$original그렇지 않으면 공백이 제거되지 않습니다.

그 후에 당신은 그냥 확인할 수 있습니다.$trimmed비어 있습니다.

[ -z "$trimmed" ] && echo "empty!"

문자열이 비어 있거나 공백만 포함되어 있는지 확인하려면 다음을 사용할 수 있습니다.

shopt -s extglob  # more powerful pattern matching

if [ -n "${str##+([[:space:]])}" ]; then
    echo '$str is not null or space'
fi

Bash 매뉴얼의 셸 매개 변수 확장 및 패턴 일치를 참조하십시오.

[ $(echo $variable_to_test | sed s/\n// | sed s/\ //) == "" ] && echo "String is empty"

문자열에서 모든 새 줄과 공백을 제거하면 빈 줄이 테스트 및 작업할 수 있는 빈 줄로 줄어듭니다.

언급URL : https://stackoverflow.com/questions/13509508/check-if-string-is-neither-empty-nor-space-in-shell-script

반응형