![오류: "[: `]' 누락", 대괄호 앞의 공백](https://linux55.com/image/134884/%EC%98%A4%EB%A5%98%3A%20%22%5B%3A%20%60%5D'%20%EB%88%84%EB%9D%BD%22%2C%20%EB%8C%80%EA%B4%84%ED%98%B8%20%EC%95%9E%EC%9D%98%20%EA%B3%B5%EB%B0%B1.png)
다음 코드를 실행하면:
#!/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"