값을 반환하는 함수가 있습니다.
하지만 더 쉬운 디버깅을 위해 몇 가지를 추가하고 싶습니다 echo
. 하지만 이렇게 하면 결과가 엉망이 됩니다.
예:
function foo {
echo "In foo"
VAR="1234"
echo "Calculated item"
echo "$VAR"
}
RESULT=$(foo)
echo "RESULT=$RESULT"
나는 그것을 기대하고 있었다 1234
.
대신 출력은 다음과 같습니다.
RESULT=In foo
Calculated item
1234
이 문제를 해결하는 올바른 방법은 무엇입니까?
답변1
디버그 출력을 표준 오류로 리디렉션합니다.
foo () {
echo 'In foo' >&2
VAR="1234"
echo 'Calculated item' >&2
echo "$VAR"
}
RESULT=$(foo)
printf 'RESULT="%s"\n' "$RESULT"
전용 "디버그" 기능을 만들 수도 있습니다.
debug () {
printf 'DEBUG: %s\n' "$@" >&2
}
foo () {
debug 'In foo'
VAR="1234"
debug 'Calculated item'
echo "$VAR"
}
RESULT=$(foo)
printf 'RESULT="%s"\n' "$RESULT"
산출:
$ sh script.sh
DEBUG: In foo
DEBUG: Calculated item
RESULT="1234"