値を返す関数があります。
しかし、より簡単なデバッグのためにいくつかを追加したいと思います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"