我花了几个小时试图理解以下错误。
我的脚本
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