添加函数的调试输出拼字结果

添加函数的调试输出拼字结果

我有一个返回值的函数。
但我想添加一些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"

相关内容