在golang exec中双引号转义

时间:2014-10-20 19:45:36

标签: go escaping double-quotes

我需要运行以下命令:

ffmpeg -i input.jpg -vf scale="'if(gt(a,4/3),320,-1)':'if(gt(a,4/3),-1,240)'" output_320x240_boxed.png

所以我执行:

cmd = exec.Command("ffmpeg", "-i", "input.jpg", "-vf", "scale=\"'if(gt(a,4/3),640,-1)':'if(gt(a,4/3),-1,300)'\"", "output_320x240_boxed.png")

失败并出现以下错误:

Error when evaluating the expression 'if(gt(a,4/3),-1,300)"'.
Maybe the expression for out_w:'"if(gt(a,4/3),640,-1)' or for out_h:'if(gt(a,4/3),-1,300)"' is self-referencing.

命令在命令行中执行时有效。 为什么会发生这种情况,如何避免这些双引号以防止出现此错误?

1 个答案:

答案 0 :(得分:9)

当您执行给定的ffmpeg命令行时,您的shell会将其解析为一组基本上的命令行参数:

{
    "ffmpeg",
    "-i",
    "input.jpg",
    "-vf",
    "scale='if(gt(a,4/3),320,-1)':'if(gt(a,4/3),-1,240)'",
    "output_320x240_boxed.png",
}

shell解释的scale=...参数中的额外引号,而不是传递给底层程序。因此,当您使用Go执行相同的程序时,您将直接传递参数列表,您应该省略这些额外的引号。