Bash
從函式中添加調試輸出拼字遊戲結果
我有一個返回值的函式。
但我想添加一些
echo
s 以便於調試。但這會破壞結果。例子:
function foo { echo "In foo" VAR="1234" echo "Calculated item" echo "$VAR" } RESULT=$(foo) echo "RESULT=$RESULT"
我期待得到
1234
.相反,輸出是:
RESULT=In foo Calculated item 1234
解決此問題的正確方法是什麼?
將調試輸出重定向到標準錯誤:
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"