이것은 내 스크립트입니다.
#!/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와 같은 고급 쉘이 필요합니다. $(( ... ))
명령 대체가 아닌 산술 대체입니다. 여기에 필요합니다$( ... )
.diff
diff
출력을 확인하는 대신 조건에서 직접 종료 상태를 확인할 수 있습니다if
. 사용하지 않은 출력을 삭제할 수 있습니다. (그래서 명령 대체나 여기도 필요하지 않습니다[[ ... ]]
.)
그리고 댓글에 제안 사항이 있습니다:
if
if
교환 및 차단을 통해else
부정적인 조건을 피할 수 있습니다.cmp -s
파일이 다른지 확인하려면 동일한 효율적인 명령을 사용할 수 있습니다.
포괄적인:
#!/bin/bash
if cmp -s <(sort 1.txt) <(sort 2.txt)
then
echo PASS
else
echo ERROR
fi