오류: "[: `]' 누락", 대괄호 앞의 공백

오류: "[: `]' 누락", 대괄호 앞의 공백

다음 코드를 실행하면:

#!/bin/bash

PREVIOUS_COMMIT=e099d95d52b8fca99e47fd7cee5f782287178b27
SERVICE=service-web-prj1

if [ ! git diff "$PREVIOUS_COMMIT" HEAD --name-only | grep -qs "$SERVICE" ] || [ ! git diff "$PREVIOUS_COMMIT" HEAD --name-only | grep -qs 'service-web' ];
    then
        echo Didnt pass first
        exit 0;
fi

echo passed first with $SERVICE

if ( ! echo "$SERVICE" | grep -q "^service-web" );
    then
        echo Didnt pass second
        exit 0;
fi

echo passed second with $SERVICE

들어갈 예정입니다(상태:

scripts/getLastCommit.1.sh: line 9: [: missing `]'
scripts/getLastCommit.1.sh: line 9: [: missing `]'

주위를 둘러보니 모두가 마지막 "]" 이전의 공백을 언급했습니다. 세 번 확인했는데 이 내용이 있습니다.

내가 뭘 잘못하고 있는지 아는 사람 있나요?

고마워요, 데니스

이것이 나에게 효과적이라는 것을 알았습니다.

if ! echo $GITDIFF | grep -q -e 'service-web*' -e $SERVICE;

답변1

test셸 대괄호 안에는 전체 명령을 테스트할 수 없습니다 . 이러한 대괄호를 완전히 제거하면 명령의 종료 코드만 테스트하게 됩니다.

#!/bin/bash

PREVIOUS_COMMIT=e099d95d52b8fca99e47fd7cee5f782287178b27
SERVICE=service-web-prj1

if ! git diff "$PREVIOUS_COMMIT" HEAD --name-only | grep -qs "$SERVICE" || ! git diff "$PREVIOUS_COMMIT" HEAD --name-only | grep -qs 'service-web'
then
        echo "Didn't pass first"
        exit 0
fi

echo passed first with "$SERVICE"

if ( ! echo "$SERVICE" | grep -q "^service-web" )
then
        echo "Didn't pass second"
        exit 0
fi

echo passed second with "$SERVICE"

관련 정보