echo 명령 끝에 ">&2"를 추가해야 합니까?

echo 명령 끝에 ">&2"를 추가해야 합니까?

예를 들어

#!/bin/bash
INT=-5
if [[ "$INT" =~ ^-?[0-9]+$ ]]; then
    echo "INT is an integer."
else
    echo "INT is not an integer." >&2
    exit 1
fi

">&2"를 제거할 때. 차이 없음. ">&2"를 추가해야 하는 이유는 무엇입니까?

답변1

차이점은 다음과 같습니다.

echo "INT is an integer."

표준 출력에 쓰고,

echo "INT is not an integer." >&2

표준 오류에 씁니다.

유닉스 세계에서 stdout이것은 일반적으로 모든 것이 잘 작동할 때 사용되며, stderr뭔가 잘못되었을 때 메시지를 인쇄하는 데 자주 사용됩니다.

기본적으로 stdout둘 다 stderr화면에 인쇄됩니다. 주요 차이점은 >|연산자가 stdout기본적으로 캡처하지만 을 캡처하지 않는다는 것입니다 stderr.

따라서 스크립트가 파이프 중앙에 있으면 파이프에 들어가는 대신 INT is an integer.파이프를 따라 계속 내려가 화면에 인쇄됩니다 .INT is not an integer

답변2

이 문자열은 표준 출력을 표준 오류로 병합합니다. 이 작업을 수행하면 표준 오류에 대한 출력이 표시될 것으로 예상됩니다. 왜 이것이 필요하다고 생각하는지 잘 모르겠습니다.

관련 정보