因为当您尝试执行命令时
$cmd
仅发生一层扩展。
$cmdcontains
echo "hello this is a test",它扩展为6个以空格分隔的标记:
echo
"hello
this
is
a
test"
这就是
set -x输出显示的内容:它将单引号括在包含双引号的标记周围,以明确各个标记的含义。
如果要
$cmd扩展为一个字符串,然后再次应用所有bash引用规则,请尝试使用以下命令执行命令:
bash -c "$cmd"
或(如@bitmask在注释中指出,这可能更有效)
eval "$cmd"
而不只是
$cmd



