쉘 스크립트는 if 문 아래의 문자열을 구문 분석할 수 없습니다.

쉘 스크립트는 if 문 아래의 문자열을 구문 분석할 수 없습니다.

make some_target이 존재하는지 찾으려는 간단한 스크립트가 있습니다. 존재하지 않으면 명령문을 인쇄하고 1로 종료하십시오.

#!/bin/bash
set +ex
output=$(make -n some_target 2>&1 | head -1)
echo "$output"
if [ "$output" == "*No rule to make target*" ]; then
  echo "Target is not Present"
  exit 1
else
  echo "foo"  
fi

하지만 오류가 발생하고 else 루프로 들어갑니다.

make: *** No rule to make target 'some_target'.  Stop.
test.sh: 5: [: make: *** No rule to make target 'some_target'.  Stop.: unexpected operato                                                                                                  
foo

답변1

아래에서 답을 찾을 수 있었습니다.

#!/bin/sh
set +ex 
if make -n some_target 2>&1 | grep -m 1 "No rule to make target"; then
        echo "Target is not Present"
        exit 1
else
        echo "foo"
fi

답변2

패턴 일치(*)는 다음에서 수행할 수 있습니다.bash논리 연산자 ==, =, , !=여기서 오른쪽 피연산자는 패턴으로 간주됩니다. 따라서 조건을 작성할 수 있습니다.

if [[ $output == *'No rule to make target'* ]]

답변에 가 포함되어 있는지 확인하세요 No rule to make target.

즉, make?의 반환 코드를 확인하는 것이 더 효율적일 수 있습니다.

(*) 파일명의 기본 패턴 매칭과 동일합니다. =~정규식을 취하는 논리 연산자 도 있습니다 .

관련 정보