コメントにデバッグ用のコードを書いておき、必要なときに文字列置換でコメントアウトする感じ。
# 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