이중 브래킷으로 구성된 stderr 리디렉션

이중 브래킷으로 구성된 stderr 리디렉션

stderr이중 괄호 생성자를 리디렉션할 수 있기를 원합니다 . 예를 들어:

a=$(($var/$var2))

일부 오류 메시지가 출력될 것입니다. 그렇다면 $var2 = 0사용자가 이것을 보지 않기를 바랍니다.

나눗셈을 하기 전에 단순히 0을 확인할 수 있다는 것을 알고 있지만, 단지 호기심에서 그리고 다른 상황에서 유용할 수 있기 때문에 이 리디렉션을 수행할 수 있는 방법이 있는지 궁금했습니다.

난 노력 했어:

a=$(($var/$var2)) 2> /dev/null

작동하지 않는 것과

a=$(($var/$var2 2> /dev/null ))

구문 오류가 발생합니다.

답변1

이 동작의 이유는 계산이 외부 명령이 아닌 셸 자체에서 수행되기 때문입니다. 쉘의 STDERR을 리디렉션하려면 해당 리디렉션으로 쉘을 시작해야 하지만 그러면 모든 오류가 손실됩니다.bash 2> /dev/null

또는 중괄호 그룹을 사용하는 것이 더 적절한 솔루션이라고 생각합니다.

{ a=$(( val1 / val2 } )); } 2> /dev/null

답변2

V=`expr "$var" / "$var2" 2>/dev/null`

그러나 나누기가 실패하면 결과는 비어 있습니다.

관련 정보