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? 의 반환 코드를 확인하는 것이 더 효율적일 수 있습니다.

(*) 이는 파일 이름에서 수행되는 것과 동일한 기본 패턴 일치입니다. =~정규식을 취하는 논리 연산자도 있습니다 .

관련 정보