コマンドを二重引用符で囲まないでください。
_T_COMMAND_=1 valgrind ---tool=memcheck --trace-children=yes command
一般的な構文は単純です
[var=value ...] cmd [args]
の期間、環境変数var
をに設定します。この方法でいくつかの変数を設定できます。value
cmd
または、変数とexport
それを設定します。その後、現在のシェルの存続期間の残りの間設定されたままになり、サブプロセスに公開されます (これが のexport
動作です)。
_T_COMMAND_=1
export _T_COMMAND_
valgrind ---tool=memcheck --trace-children=yes command
同様に、valgrind
そのオプションを処理し、指定されたcommand
(任意のオプションを含む) をサブプロセスとして実行します。
カーネルが引数を認識する前にシェルが引用符を削除するため、二重引用符で囲まれた単一のコマンドは無害です。二重引用符で囲まれたスペースを含む文字列は単一の引数として保持されますが、引用符がないと複数の引数になります。見よ:
bash$ perl -le 'print "<<$_>>" for @ARGV' "foo bar" baz quux
<<foo bar>>
<<baz>>
<<quux>>
または、まだ引用されていないすべてのものを二重引用符で囲みます。
bash$ "perl" "-le" 'print "<<$_>>" for @ARGV' "yowza"
<<yowza>>
シェルはこれを解析して
<<perl>>
<<-le>>
<<print "<<$_>>" for @ARGV>>
<<yowza>>
プロセス内の(外側の)引用符を削除します。