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