如果我试图插入脚本调用结果的变量,则bash Echo会打印Gibberish



我在尝试执行算术操作时发现外观非常令人不安。我需要传递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字符的输出。

相关内容

  • 没有找到相关文章

最新更新