连接多个变量不起作用

时间:2013-11-09 23:09:41

标签: bash

我有这些变量:

$ reel = XF_1

$ base = AA000201

$ output_dir =目录

此命令无效。它生成一个名为directory / AA000201.mp4

的文件
ffmpeg -i $1 $output_dir"/$reel_$base.mp4

此命令有效。它生成一个名为directory / XF_1_AA000201.mp4的文件。

ffmpeg -i $1 $output_dir"/"$reel"_"$base".mp4"

但它会出现此错误:/ Volume / RAID / Lights / LightsFootage / Day01 / B_Camera / XF_1 / CONTENTS / CLIPS001 / AA0002 / AA000201.MXF:第5行:继续:仅在for',中有意义,或“直到'循环

注意:为简单起见,我在此处缩短了目录名称。

2 个答案:

答案 0 :(得分:1)

ffmpeg -i "${1}" "${output_dir}/${reel}_${base}.mp4"

答案 1 :(得分:1)

Polbrelkey给了你答案,但我还是会加上这个。

让我们明白为什么ffmpeg -i $1 $output_dir"/$reel_$base.mp4无法解释:

看看这三个变量:

reel="A"
reel_="B"   #Nothing prevents you from ending a variable with an underscore
base="C"

现在,让我们解释一下ffmpeg -i $1 $output_dir"/$reel_$base.mp4: 根据您分解字符串的方式,您可以获得:

#ffmpeg -i $1 $output_dir"/${reel_}${base}.mp4
ffmpeg -i $1 $output_dir"/BC.mp4    

#ffmpeg -i $1 $output_dir"/${reel}_${base}.mp4
ffmpeg -i $1 $output_dir"/A_C.mp4   

在您的情况下,Bash实际上是在解释第一个(实际上,他寻找最长的变量名称),并且由于未分配reel_="",因此输出directory/AA000201.mp4base.mp4没有这类问题,因为变量名称不能有点。

来源:Parameter Expansion on Bash-Hackers