bashコマンドの代替出力がエスケープされるのを防ぐ方法は?

bashコマンドの代替出力がエスケープされるのを防ぐ方法は?

bashスクリプトでコマンド置換を使用して、次のように変数に基づいてリダイレクトシンボルを出力しようとしています。

IS_VERBOSE=false
curl $BLAH $( $IS_VERBOSE && echo '-i' || echo '> /dev/null' )

つまり、冗長な場合は-iスイッチを追加し、それ以外の場合は標準出力からすべてを削除します。問題はIS_VERBOSE偽のときに私のコマンドが

curl $BLAH \> /dev/null

より一般的には、コマンド置換は文字や> >> & | # $その他の文字をエスケープします。コマンド置換を使用してエスケープなしでこれらのシンボルを出力するにはどうすればよいですか?

ベストアンサー1

置換が発生した後(POSIXでは「>」の前の左側のみをターゲットにすることができます)、「>」があるかどうか評価されなくなるため、目的のアプローチは機能しません。 。

POSIX準拠に興味がない場合(最終的には「bash」とタグ付けした場合)、右側を動的に設定して解決策を見つけることができますが、個人的にはまったく異なるアプローチをとります。以下で詳細に説明する。カスタムファイル記述子に基づいて詳細/自動モードを有効にします。https://stackoverflow.com/a/20942015/2261442

投稿から抜粋したコードは、次の様子を示しています。

# Some confirmations:
printf "%s\n" "This message is seen at verbosity level 3 and above." >&3
printf "%s\n" "This message is seen at verbosity level 4 and above." >&4
printf "%s\n" "This message is seen at verbosity level 5 and above." >&5

おすすめ記事