【问题标题】:Store for loop results as a variable in bash将 for 循环结果存储为 bash 中的变量
【发布时间】:2016-07-13 10:29:58
【问题描述】:

我有一个类似于以下的循环:

for time in ${seconds_list}; do
    echo "scale=2; (${cur_time}-${time})/3600" | bc
done

当然,我可以将结果“回显”到一个文件并完成它,但我认为更优雅的方法是将所有 for 循环结果存储在一个变量中,我可以在以后使用时间。 包含所有结果的变量必须如下所示:

var='30.25
16.15
64.40
29.80'

有没有一种简单的方法可以实现这一目标?

【问题讨论】:

  • 你用这些数据做什么?听起来您正在尝试帮助我们实施您的解决方案,而不是解决您的潜在问题。这使它成为XY Problem。当然,您可以按照您建议的方式执行此操作。或者其他方式。但最佳选择取决于您的问题中没有 (yet) 的详细信息。

标签: linux bash for-loop


【解决方案1】:

这真的很简单,你可以将整个循环的输出重定向到一个变量(如果你只想使用一个变量):

VARIABLE=$(for time in ...; do ...; done)

你的例子:

var=$(for time in ${seconds_list}; do
          echo "scale=2; (${cur_time}-${time})/3600" | bc
      done)

只需将您的代码包含在 $() 中即可。

【讨论】:

  • 谢谢!不敢相信我没想到!
  • 一直在寻找这样的答案。谢谢!
【解决方案2】:

最好使用 BASH 数组来存储结果:

results=()

for time in ${seconds_list}; do
    results+=($(bc -l <<< "scale=2; ($cur_time-$time)/3600"))
done

# print the results:

printf "%s\n" "${results[@]}"

【讨论】:

  • 我更喜欢这个版本,因为在另一种情况下,也许你在循环中有一些你不想记录在变量中的东西。我喜欢这是在里面并特别记录下来。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多