Bash

從函式中添加調試輸出拼字遊戲結果

  • March 30, 2018

我有一個返回值的函式。

但我想添加一些echos 以便於調試。但這會破壞結果。

例子:

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"

引用自:https://unix.stackexchange.com/questions/434487