명령 결과가 zsh if 문에 출력되었는지 확인하는 방법은 무엇입니까?

명령 결과가 zsh if 문에 출력되었는지 확인하는 방법은 무엇입니까?

diff두 파일을 비교 하고 아무것도 반환하지 않으면 echo "no diff"차이점을 보여주고 싶습니다 . 현재 if 문은 차이가 없는 경우에만 작동하지만 차이가 있으면 "찾을 수 없음" 오류가 발생합니다.

test.sh는 다음과 같습니다.

#!/bin/zsh
if [$(diff file1 file2) = '']
then
    echo "no diff"
else
    diff file1 file2
fi

파일이 동일한 경우:

$ sh test.sh
no diff

파일이 다른 경우:

$ cat file1
hello

$ cat file2
goodbye

$ sh test.sh
test.sh: 1: test.sh: [1,8c1,8: not found
< hello
---
> goodbye

해결책을 검색하는 동안 공백 if [ $(diffvs를 사용하는 if [$(diff것이 차이가 있고 단일 =vs를 사용하는 ==것도 도움이 된다는 것을 알았습니다. 문제는 내가 출력을 테스트하고 있다는 것입니다 ''(아무것도 아님). 작동하지만 "찾을 수 없음" 줄이 거기에 속하지 않습니다. 나는 그 짜증나는 줄을 제거하고 싶지 않고 if 문을 올바른 방식으로 수행합니다. 왜냐하면 두 번 실행하지 않고도 필요한 결과를 얻을 수 있는 방법이 있어야 하기 때문입니다 diff.

답변1

diff차이점이 발견되지 않으면 0 종료 상태를 제공하므로 diff한 번만 사용하고 필요에 따라 메시지를 출력합니다.

if diff file1 file2; then
    echo 'no diff'
fi

  • diff유틸리티에는 -s/ --report-identical-files(POSIX 사양 확장) 옵션이 있을 수 있습니다. 이는 명령을 다음과 같이 단순화합니다.

    diff -s file1 file2
    
  • 오류의 원인은 [1,8c1,8: not found구문 오류입니다. [유효한 표현식 및 종료 매개변수와 함께 단독으로 나타나야 합니다 ]. 사용 방법에 대한 정보 test는 unix.stackexchange(협회 협회 협회) & 매뉴얼 페이지에서 man 1 test&man 1p test

  • 에서 test.sh첫 번째 줄은 이지만 그 다음에는 인터프리터를 사용하여 #!/bin/zsh스크립트가 실행됩니다 (아마도 아님 ). 이 기능을 사용하려면 실제로 스크립트를 실행하고 있는지 확인해야 합니다.shzshzshzsh

관련 정보