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`
그러나 나누기가 실패하면 결과는 비어 있습니다.