我在尝试执行算术操作时发现外观非常令人不安。我需要传递bc
中脚本调用结果的变量,以在2上进行分配。
看起来像这样:
durat=$(echo -n `ffprobe -v error -show_format $1 | awk -F= '/duration/{print $NF}'`)
echo "duration: ${durat}" # output: `duration: 54.334689`
echo "scale=1; ${durat} / 2" # output: ` / 2e=1; 54.334689` !!!!!
dur=54.334689 # if I substitute it to `dur='54.334689'` it still works
echo "scale=1; ${dur} / 2" # output: `scale=1; 54.334689 / 2`
我也试图从durat
剥离echo -n。
谁能解释为什么我得到此/ 2e=1; 54.334689
而不是预期的scale=1; 54.334689 / 2
?
您的字符串的构造在其中留下了返回字符,因此内容为:
scale=1; 54.334689<cr> / 2
输出该字符串时,您会得到:
scale=1; 54.334689<cr>
/ 2
第二行叠加第一行,导致您的内容请参阅:
s/ 2e=1; 54.334689
因此,由于这里是durat
,它是此处的问题(几乎可以肯定地将ffprobe
输出设置为54.334689<cr>
,而不是将其设置为正确的54.334689
),因此您只需要确保剥离无效的角色即可。您可以使用以下操作来做到这一点:
durat=$(ffprobe -v error -show_format $1 | tr -d 'r' | awk -F= '/duration/{print $NF}')
您可以确认有问题的输出只需执行:
ffprobe -v error -show_format yourInputFile | grep duration | od -xcb
并查找r
字符的输出。