不要将命令放在双引号中。
_T_COMMAND_=1 valgrind ---tool=memcheck --trace-children=yes command
一般语法很简单
[var=value ...] cmd [args]
这会将环境变量var
设置value
为cmd
. 您可以通过这种方式设置多个变量。
或者,设置变量和export
它;那么它将在当前 shell 的剩余生命周期内保持设置,并暴露给子进程(这就是它export
所做的)。
_T_COMMAND_=1
export _T_COMMAND_
valgrind ---tool=memcheck --trace-children=yes command
同样,valgrind
处理其选项,然后将指定的command
(带有任何选项)作为子进程运行。
双引号中的单个命令是无害的,因为 shell 会在内核看到参数之前去掉引号。双引号中带有空格的字符串将保留为单个参数,而没有引号的字符串将成为多个参数。看哪:
bash$ perl -le 'print "<<$_>>" for @ARGV' "foo bar" baz quux
<<foo bar>>
<<baz>>
<<quux>>
或者同样,在所有未引用的内容周围添加无害但无疑会令人困惑的双引号:
bash$ "perl" "-le" 'print "<<$_>>" for @ARGV' "yowza"
<<yowza>>
shell 将其解析为
<<perl>>
<<-le>>
<<print "<<$_>>" for @ARGV>>
<<yowza>>
并删除该过程中的(外部)引号。