나는 수업 시간에 학생들에게 흥미로운 코드를 보여 주었고 놀랍게도 작동했습니다 zsh
. 그런 다음 으로 전환하여 bash
예상대로 작동했습니다.
코드는 아래와 같이 표시됩니다.
[ $(( $RANDOM % 6 )) == 0 ] && echo "Boom" || echo "Click"
예상대로 bash
인쇄되거나 Boom
무작위 Click
로 인쇄됩니다. 하지만 zsh
다음과 같은 오류 메시지가 나타납니다.
zsh:= 찾을 수 없음
차이점이 무엇인지 설명할 수 있는 사람이 있나요? 내가 이해한 바로는 두 쉘 모두 스크립트를 동일한 방식으로 해석해야 합니다.
감사해요.
답변1
시도해보고 unsetopt equals
다시 시도해 보세요. 또는 첫 번째 같음 문자 주위에 따옴표를 넣으세요.
for 조건을 사용하면 [
모든 매개변수가 정상적으로 평가되며 단어 시작 부분에 있는 =는 명령 위치를 가져오는 데 유용한 zsh 단축어입니다. 예를 들어 =ls
, /bin/ls
주어진 ==
zsh find =
명령을 찾을 수 없습니다.
posix 모드(sh 시뮬레이션)에서 Zsh와 bash 간의 호환성이 훨씬 더 좋아질 것입니다. 호환되는 부분이 많고 배운 대부분의 bash 지식은 여전히 유용하지만 이식 가능한 스크립트를 작성하려면 알아야 할 몇 가지 사항이 있습니다.
[
내장된 this 와 달리 [[
파서가 이해하는 예약어이므로 문제가 덜 발생합니다. 그러나 이 경우에는 산술 모드를 사용하므로 단순화할 수 있습니다.
(( RANDOM % 6 == 0 )) && echo "Boom" || echo "Click"
실제로, 0과의 비교는 심지어 중복됩니다. 왜냐하면 기본 반환 상태는 값이 0인지 여부를 반영하기 때문입니다. 비록 반대의 의미를 갖고 있지만 말입니다:
(( RANDOM % 6 )) && echo "Click" || echo "Boom"