[bash] 문자열이 비어 있지 않거나 쉘 스크립트에서 공백이 아닌지 확인하십시오.

문자열이 공백도 비어 있지 않은지 확인해야하는 다음 셸 스크립트를 실행하려고합니다. 그러나 언급 된 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

또는

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


답변

단일 공백이 아닌 임의의 공백을 확인해야하는 경우 다음을 수행 할 수 있습니다.

여분의 공백 문자열을 제거하려면 (중간 공백을 하나의 공백으로 간주) :

trimmed=`echo -- $original`

는 에코로 인식되는 스위치 --$original포함되어 있는 경우 에도 여전히 에코 될 일반 인수로 간주됩니다. 또한 ""주위 $original에 두지 않는 것이 중요합니다. 그렇지 않으면 공백이 제거되지 않습니다.

그 후에 $trimmed비어 있는지 확인할 수 있습니다 .

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


답변

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

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

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

그런 다음 처음 두 개의 슬래시 는 우리의 경우 공백에서 다음 모두 와 일치 함을 의미 합니다. 그런 다음 세 번째 슬래시 다음에 대체 (빈) 문자열이 나오고 “}”로 닫힙니다. 일반적인 정규식 구문과의 차이점에 유의하십시오.

여기에서 bash 쉘 스크립팅의 문자열 조작에 대해 자세히 읽을 수 있습니다 .


답변

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

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"

문자열에서 모든 줄 바꿈과 공백을 제거하면 빈 줄이 테스트되고 실행될 수있는 것으로 축소됩니다.


답변