如何在命令中正确引用字符串进行替换?

How to correctly enquote string for substitution in command?

我正在尝试使用 bash 将生成的过滤器链传递给 ffmpeg,如下所示:

FILTER="-filter_complex \"...\""
ffmpeg -i ... $FILTER ...

然而ffmpeg不喜欢这样,告诉我

No such filter: '"'

那么,如何正确设置变量以进行适当的替换?

您需要 -filter_complex... 部分作为两个单独的参数传递,但您需要 ... 部分保持完整(作为单个参数 - 不被分割空白,不接受 filename-expansion,等等)。

最好的方法是使用一个数组,然后在 double-quotes:

中使用 ${arrayname[@]} 符号来扩展它
FILTER=(-filter_complex '...')
ffmpeg -i ... "${FILTER[@]}" ...