これが私がやろうとしていることです:
[[ "${1}" == "debug" ]] && DEBUG='2>/dev/null' || DEBUG=''
{
echo "a b c"
echo "d e f" >&2
} ${DEBUG}
これは、「sh: 予期しないトークン `${BLAH}' の近くで構文エラーが発生しました」という理由で機能しません。私は次のように似たようなことをすることができます:
eval echo "def" ${DEBUG}
しかし、コードの大きなブロックではそれができません。別の方法として、次のように、「exec」を使用して、残りのコードとインラインでリダイレクトを行うこともできます。
[[ "${1}" == "debug" ]] && exec 2>/dev/null
しかし、特定の方法で exec を使用しようとすると、シェルがハングします。何かアイデアはありますか?