在golang exec中转义双引号

我需要运行以下命令:

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.

在命令行中执行命令时,命令起作用。为什么会发生这种情况?我该如何转义那些双引号以防止发生此错误?

回答:

当执行给定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",

}

scale=...shell解释的参数中的多余引号,而不是传递给基础程序。因此,当使用Go执行相同的程序时,直接在其中传递参数列表,则应省去那些多余的引号。

以上是 在golang exec中转义双引号 的全部内容, 来源链接: utcz.com/qa/433735.html

回到顶部