コメントにデバッグ用のコードを書いておき、必要なときに文字列置換でコメントアウトする感じ。
# foo.sh
# デバッグプリント関数
# DEBUG function warn { echo "debug: $*" }
# または赤文字のデバッグプリント関数 (Zsh 限定)
# DEBUG function warn { print -P "%F{red}debug: $*%f" }
# デバッグモードで実行する部分
# DEBUG warn "HELLO"
# DEBUG warn "WORLD"
# デバッグモードでは実行しない部分
# DEBUG : <<'EOT'
echo "hello"
echo "world"
# DEBUG EOT
# 普通に実行
$ sh foo.sh
hello
world
# デバッグモードで実行
$ sed 's/#DEBUG //' foo.sh | sh -s
debug: HELLO
debug: WORLD
# デバッグモードで source (Zsh 限定)
$ source =(sed 's/#DEBUG //' foo.sh)
debug: HELLO
debug: WORLD