【问题标题】:Store output of for loop into an array or variable将 for 循环的输出存储到数组或变量中
【发布时间】:2017-06-11 03:21:20
【问题描述】:

我有一个如下所示的 for 循环。我需要将循环的整个输出添加到数组或变量中。

for i in $ip
do
  curl -s $i:9200
done

知道如何实现吗?

【问题讨论】:

    标签: arrays bash variables for-loop


    【解决方案1】:

    你可以这样使用它:

    # declare an array
    declare -a arr=()
    
    for i in $ip
    do
      # append each curl output into our array
      arr+=( "$(curl -s $i:9200)" )
    done
    
    # check array content
    declare -p arr
    

    在 curl 注释周围使用引号很重要,以避免将 curl 命令输出的单词拆分为多个数组条目。带引号的所有 curl 输出将成为数组中的单个条目。

    【讨论】:

    • 伟大的@anubhava。我认为如果你能解释为什么 curl 命令需要在双引号内会很好。
    • 我需要的是将该 curl 命令的输出添加到数组中,而不是命令本身。
    • @zozo6015:使用$(...) 即命令替换,我们添加curl 命令的输出而不是命令本身。
    • 感谢@codeforester。我在回答中添加了一些解释。
    【解决方案2】:

    您可以捕获任何命令的输出,包括复合命令,方法是将其括在$() 中。使用该技术,您可以在变量中捕获 for 循环的输出,如下所示:

    results=$(
      for i in $ip
      do
        curl -s $i:9200
      done
    )
    

    原则上,可以以类似的方式捕获到数组中,但适当地处理元素分隔符可能会很困难。

    【讨论】:

      【解决方案3】:

      您可以使用+=

      declare -a output
      for i in $ip
      do
        output+=("$(curl -s $i:9200)")
      done
      

      【讨论】:

      • 我收到-bash: syntax error near unexpected token ('`
      • 是的。刚刚测试了一下,显然+=之前不能有空格。嗯,你每天都会学到新东西
      猜你喜欢
      • 2021-09-12
      • 2015-12-26
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      相关资源
      最近更新 更多