편집하다: 다시 시도했는데 지금은 잘 작동합니다 bash
. 무엇이 바뀌었는지 모르겠습니다. 내 편집기(Bash IDE 확장이 포함된 VS Code)에서 여전히 failed to parse
오류가 발생하지만 스크립트는 제대로 실행됩니다. 이 질문을 삭제해야 하나요?
원래 질문
내 스크립트는 현재 다음을 수행합니다.
if cmd1; then
echo Success
else
if [[ "$x" == "z" ]] && cmd2; then
echo Success
else
echo Failure
fi
fi
나는 계속해서 "한 줄"로 줄이려고 노력하지만 bash
다음과 같은 말에 목이 막힙니다.
if cmd1 || { [[ "$x" = "z" ]] && cmd2; }; then
echo Success
else
echo Failure
fi
그렇지 않으면 항상 실행되기 { grouping }
때문에 이것이 필요하다고 생각합니다 . && cmd
이 문제를 어떻게 해결할 수 있나요?
답변1
서브쉘을 사용하여 그룹화할 수 있습니다.
if cmd1 || ( [[ "$x" == 'z' ]] && cmd2 ); then
...
else
...
fi
답변2
잘 작동합니다:
cmd1() { return 1; }
cmd2() { return 0; }
x=z
if cmd1 || { [[ "$x" = "z" ]] && cmd2; }; then
echo Success
else
echo Failure
fi
Success
에서 이 코드를 실행하고 있지 않습니까 sh
? 그것은 당신에게 다음과 같은 것을 줄 것입니다
sh: 4: [[: not found
답변3
질문의 코드는 실제 셸에서 제대로 작동해야 하지만 일부 다른 프로그램에서는 이를 구문 분석하지 못할 수도 있다는 점을 이해합니다. 프로그램을 고칠 수 없다고 가정하면, 해결 방법은 조건의 두 번째 부분을 함수로 분할하는 것일 수 있습니다.
cond2() { [[ "$x" = "z" ]] && cmd2; }
if cmd1 || cond2; then
...
그렇게 간단하지는 않지만 파서가 가치가 있다면아무것, 함수 정의를 구문 분석할 수 있어야 합니다.