sh -c:未终止的引用字符串错误

sh -c:未终止的引用字符串错误

我花了几个小时试图理解以下错误。

我的脚本

CMD="sh -c 'echo \"a\"'"
$CMD

错误:

"a"': 1: "a"': Syntax error: Unterminated quoted string

当然,当我这样做echo $CMD并粘贴结果时,它会按预期工作......

错误的原因是什么?

编辑:

我要求一个解释,而不仅仅是一个解决方法。因此,我认为以下链接没有回答我的问题: 在函数中引用会导致错误

答案1

这行不通。当你的 shell 执行分词时,你将得到论点:

sh
-c
'echo
"a"'

为此,您必须使用 bash 数组:

cmd=( sh -c 'echo "a"' )
"${cmd[@]}"

答案2

这里的主要错误是认为周围的单引号'echo \"a\"'会停止 shell 执行的“分词”并echo "a"作为单个参数传递给 sh。

在这种情况下,单引号实际上被视为“文字”而不是“语法”,因为它们包含在外部双引号内!

以下链接对我帮助最大:http://mywiki.wooledge.org/Arguments

相关内容