함수 철자 결과의 디버그 출력 추가

함수 철자 결과의 디버그 출력 추가

값을 반환하는 함수가 있습니다.
하지만 더 쉬운 디버깅을 위해 몇 가지를 추가하고 싶습니다 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"

관련 정보