【发布时间】:2018-02-06 05:08:45
【问题描述】:
我正在遍历整数数组${startTimes}(音频文件中的标记位置,在样本中)并使用bc 将这些整数转换为毫秒。我将结果传递到一个新数组${msValuesArray}。如果我一次运行每个数组元素,它工作正常。如果我在for 循环中运行它:
for i in $(seq 0 ${#startTimes[@]}); do
msValuesArray+=($(bc <<< ${startTimes[i]}/44.1))
done
生成的${msValuesArray} 包含预期结果,但终端输出(standard_in) 1: parse error。
虽然我打算在 shell 脚本中使用它,并且在阅读了此处的其他问题后,我了解到在命令的开头添加 #!/bin/bash 可以避免解析错误,但我仍然不明白以下内容:
a) 为什么手动将 ${startTimes} 元素传递到 bc 时不会出现解析错误,而 for 循环也可以工作,但会输出解析错误(在 shell 脚本之外)?
b) 尽管存在解析错误,但我还是得到了我想要的结果数组。我应该忽略错误吗?
c) 在命令的开头添加#!/bin/bash 时(仍在shell 脚本之外,只是在命令行中)为什么无法访问结果? (输入echo ${msValuesArray[@]} 返回一个空数组。)
d) 在 shell 脚本中运行时,是否发生了同样的错误,只是没有打印到终端?
感谢任何帮助。谢谢。
【问题讨论】:
-
starts数组是什么样的?它是否具有与startTimes相同数量的元素?这是你的整个剧本吗?你如何运行它? “在命令行中添加#!/bin/bash”是什么意思? -
抱歉,复制/粘贴错误。我刚刚修好了。它应该是
startTimes。我还没有完整的脚本,只是在命令行中一次测试一个命令,以确保我的脚本能够运行(如果有更好的方法,我会全力以赴)。对于shebang,如果我在命令行中输入所有这些#!/bin/bash; for...(etc)...; done,我不会得到任何解析错误——但也没有可访问的结果。我假设它在另一个我无法访问的 shell 中运行?显然还在学习。 -
如果有帮助,
startTimes看起来像这样:0 87053 91463 190062 194472 290520 294930 387582 391992。只是一堆整数。
标签: bash shell bc herestring