sh는 [: 누락 `]'을 얻기 위해 두 가지 조건을 테스트합니다.

sh는 [: 누락 `]'을 얻기 위해 두 가지 조건을 테스트합니다.

해결하기 매우 어려운 버그가 있습니다. 일어나야 할 일은 두 가지 조건을 테스트한 다음 무언가를 수행하는 것입니다. 대상은 비어 있는지 또는 일치하는지 여부입니다.

if [ -z "$_BRANCH"  ] || [[ "$_BRANCH" = "master" ]]; then
    _FOE_BRANCH="master"
    [ -s "$module_dir/branch.gitploy" ] && _FOE_BRANCH=$(cat "$module_dir/branch.gitploy")
    [ "$_FOE_BRANCH" -ne "master"] && _BRANCH=$_FOE_BRANCH
fi

어떤 이유로 인해 이 오류가 계속 발생합니다.

[: missing `]'

이 라인의 경우

if [ -z "$_BRANCH"  ] || [[ "$_BRANCH" = "master" ]]; then

하지만 읽고 지우려고 하면 계속 반복됩니다. 나는 모든 것이 괜찮을 것이라고 기대한다https://stackoverflow.com/a/16138899/746758.

유사한 게시물을 본 적이 있고 여러 번 오류를 수정하지 않고 게시한 것이 아니기 때문에 이를 방지하고 싶습니다.이것은 중복이 아닙니다도착하다 Bash if 문[: `]' 오류가 누락되었습니다.또는if 조건의 괄호: 공백 없이 구문 오류가 발생하는 이유는 무엇입니까? , 제가 ​​아는 한 답변에는 공간 문제가 없습니다. 나는 사전에 일치하는 항목이 있다고 생각합니다. 이것은 해결책이 필요한 다른 문제라고 생각합니다.

답변1

첫 번째 줄에 오류가 있는 것이 확실합니까? 마지막 테스트에 공백이 없습니다. 변화

[ "$_FOE_BRANCH" -ne "master"] && _BRANCH=$_FOE_BRANCH

도착하다

[ "$_FOE_BRANCH" -ne "master" ] && _BRANCH=$_FOE_BRANCH

또한, 당신이 얘기하고 있기 때문에, 반드시 bash일 필요는 없습니다. [대신 계속 사용하도록 첫 번째 줄을 변경할 수 있습니다 [[. 일부 쉘에서는 작동하지 않을 수 있습니다.

if [ -z "$_BRANCH"  ] || [ "$_BRANCH" = "master" ]; then

관련 정보