2014-10-20 83 views
4

我需要下面的命令来运行:双引号golang高管逃脱

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. 

司令部工作时在命令行中执行。 为什么会发生这种情况,我怎样才能避免这些双引号来防止这个错误?

+3

为您的Go字符串文字使用反引号\和\' – kostix 2014-10-20 19:48:16

回答

8

当你执行给定的ffmpeg命令行,你的壳解析成一组命令行参数主要有:

{ 
    "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执行相同的程序时,你直接传递参数列表,你应该省略那些额外的引号。