쉘 스크립트에서 복합 명령을 실행하는 방법은 무엇입니까?

쉘 스크립트에서 복합 명령을 실행하는 방법은 무엇입니까?

이것은 내 스크립트입니다.

#!/bin/sh

result=$((diff <(sort 1.txt) <(sort 2.txt)))
if [[ $result != "" ]]
then
    echo ERROR
else
    echo PASS
fi

이 스크립트를 실행할 때 오류가 발생합니다.

chk.sh: line 3: diff <(sort 1.txt) <(sort 2.txt): missing `)' (error token is "1.txt) <(sort 2.txt)")

원인은 무엇이며 해결 방법은 무엇입니까?

답변1

지금 몇 시지:

  • sh에서는 프로세스 대체( <( ... )) 및 확장 테스트 구문을 [[ ... ]]사용할 수 없습니다. bash 또는 ksh와 같은 고급 쉘이 필요합니다.
  • $(( ... ))명령 대체가 아닌 산술 대체입니다. 여기에 필요합니다 $( ... ).
  • diffdiff출력을 확인하는 대신 조건에서 직접 종료 상태를 확인할 수 있습니다 if. 사용하지 않은 출력을 삭제할 수 있습니다. (그래서 명령 대체나 여기도 필요하지 않습니다 [[ ... ]].)

그리고 댓글에 제안 사항이 있습니다:

  • ifif교환 및 차단을 통해 else부정적인 조건을 피할 수 있습니다.
  • cmp -s파일이 다른지 확인하려면 동일한 효율적인 명령을 사용할 수 있습니다.

포괄적인:

#!/bin/bash

if cmp -s <(sort 1.txt) <(sort 2.txt)
then
    echo PASS
else
    echo ERROR
fi

관련 정보