shell脚本中奇怪的单引号

shell脚本中奇怪的单引号,shell,Shell,我在test.sh中编写了这样的脚本: #!/bin/bash CPPCHECK_PATH=haha SRC_TMP_PATH=asdf xmlPath=test cmd="$CPPCHECK_PATH/cppcheck $SRC_TMP_PATH --xml 2>$xmlPath" `$cmd` 我运行“sh-x test.sh”,控制台输出为: sh -x test.sh + CPPCHECK_PATH=haha + SRC_TMP_PATH=asdf + xmlPath=tes

我在test.sh中编写了这样的脚本:

#!/bin/bash
CPPCHECK_PATH=haha
SRC_TMP_PATH=asdf
xmlPath=test
cmd="$CPPCHECK_PATH/cppcheck $SRC_TMP_PATH --xml 2>$xmlPath"
`$cmd` 
我运行“sh-x test.sh”,控制台输出为:

sh -x test.sh 
+ CPPCHECK_PATH=haha
+ SRC_TMP_PATH=asdf
+ xmlPath=test
+ cmd='haha/cppcheck asdf --xml 2>test'
+ echo haha/cppcheck asdf --xml '2>test'
haha/cppcheck asdf --xml 2>test
++ haha/cppcheck asdf --xml '2>test'

为什么“2>测试”周围有一对单引号?由于单引号,脚本无法正常运行。有人知道吗?

单引号是用来告诉您它被用作参数,而不是后跟文件名的重定向,因为您不能以这种方式在变量中包含重定向。从变量中删除重定向并单独执行。

我没听清楚。你的意思是我应该写:$CPPCHECK\u PATH/CPPCHECK$SRC\u TMP\u PATH--xml2>$xmlPath,不要将其设置为变量cmd?将重定向移出变量。和。