2016-12-19 18 views
0

Это очень простой вопрос о расширении параметров. В качестве примера, здесь две формы параметра звукового кодека для команды FFmpeg:Как закодировать параметр с переменной, которая расширяется в переменное число компонентов параметров

Форма 1:

ffmpeg ... -acodec copy ... 

Форма 2:

ffmpeg ... -an ... 

Я хотел бы выразить параметр и (для формы 1) его значение как переменную или переменные, которые будут работать в обоих сценариях.

Это работает для формы 1:

param1="-acodec" 
param2="copy" 
ffmpeg ... "$param1" "$param2" ... 

, но это не работает:

param="-acodec copy" 
ffmpeg ... "$param" ... 

и не делает эту работу:

param1="-acodec" 
param2=" copy" 
ffmpeg ... "$param1$param2" 

С другой стороны, это работает для формы 2 :

param="-an" 
ffmpeg ... "$param" ... 

и это работает:

param1="-an" 
param2="" 
ffmpeg ... "$param1$param2" 

, но это, очевидно, не работает из-за дополнительного символа пробела:

param1="-an" 
param2="" 
ffmpeg ... "$param1" "$param2" ... 

Есть одно выражение, которое работает для обеих форм параметра?

ответ

1

Используйте массив.

# Pick one. 
# param=(-acodec copy) 
# param=(-an) 

ffmpeg ... "${param[@]}" ... 
+0

Это прекрасно работает в моем первоначальном тестировании. Спасибо! – scolfax

+0

Для других новичков, подобных мне, я обнаружил, что могу добавить дополнительные параметры следующим образом (продолжение с текущим примером ffmpeg): param + = (- vcodec libx264); param + = (- ar 48000); и т. д. Одно выражение «$ {param [@]}» будет соответствующим образом расширять все параметры. Еще раз спасибо за очень полезный совет, chepner. – scolfax