bash + 변수를 공백과 비교

bash + 변수를 공백과 비교

인쇄하고 싶어요방화벽-cmd--상태변수의 상태 - $STAT

그런 다음 $STAT 변수를 "실행되지 않음" 문자열과 비교합니다.

그러나 변수 내부에 공백이 있기 때문에 비교는 false를 반환합니다.

Bash에서 주기적 만료를 수행하는 방법을 제안하십시오.

따라서 변수에 "실행되지 않음"이 포함되어 있는지 확인하여 에코를 통해 "실행되지 않음"을 인쇄할 수 있습니다.

#  firewall-cmd --state
   not running
   STAT=` firewall-cmd --state `
   echo $STAT
   not running
   [[ $STAT = "not running" ]] && echo "not running"

   no output 

답변1

이것은 잘 작동합니다:

$ stat=$(echo "not running")
$ [[ $stat = "not running" ]] && echo yes
yes

그러나 변수에 선행 또는 후행 공백이 있으면 작동하지 않습니다. 그러나 패턴 일치 또는 정규식 일치를 사용하여 재정의할 수 있습니다.

$ stat=$(echo " not running ")
$ [[ $stat = *"not running"* ]] && echo yes
yes
$ [[ $stat =~ "not running" ]] && echo yes
yes

둘 다 변수에서 문자열을 검색합니다 not running. 첫 번째 별표는 선행 또는 후행 문자를 명확하게 나타냅니다. 두 번째는 기본적으로 문자열의 어느 곳에서나 일치하는 항목을 찾는 정규식 일치입니다.

정규식을 사용하여 선행 또는 후행 공백을 명시적으로 일치시키려면 가장 쉬운 방법은 정규식을 변수에 넣는 것입니다. $pattern이어야 한다인용되지 않음특정 조건에서.

$ pattern="^ *not running *$"
$ [[ $stat =~ $pattern ]] && echo yes
yes

(여기에는 임의의 공백이 아닌 추가 공백 문자만 있을 수 있다고 가정합니다.)

답변2

따옴표를 사용해야 합니다.

출력이 이면 명령은 firewall-cmd --state변수 를 문자열로 설정한 다음 실행을 시도합니다 .not runningSTAT=$( firewall-cmd --state )STATnotrunning

당신이하고 싶은 일은 :

STAT="$( firewall-cmd --state )"

변수를 사용하지 않고 이 모든 작업을 한 번에 수행할 수 있습니다.

if [[ "not running" = "$( firewall-cmd --state )" ]]; then
    echo "It's not running"
else
    echo "It's running"
fi

관련 정보