首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将循环中生成的项存储在变量或数组中,而不使用文件。

将循环中生成的项存储在变量或数组中,而不使用文件。
EN

Stack Overflow用户
提问于 2022-04-14 14:00:45
回答 2查看 53关注 0票数 0

我是在github操作中这样做的,我有一个for循环

代码语言:javascript
运行
复制
items="item1 item2 item3"
version=$(date +%s)

for item in $items; do 
    # some code
    echo "category/$item:$version" | cut -d '/' -f2- | tee -a list_all_items.txt;   
done

这也没问题。我在该文本文件中获得了我需要的输出,但我试图避免使用文本文件,我不知道如何将输出存储在某种变量/数组中,我以后可以重用.

我确实需要将list_all_items.txt中的任何内容存储在变量中,并且可以在for循环之外进行存储,但是在for循环中是否有可能实现它呢?

编辑:我编辑的脚本是可复制的。

输出(list_all_items.txt) )

代码语言:javascript
运行
复制
item1:1649946431 item2:1649946431 item3:1649946431

等等,所以它是一个字符串,它的值被空格分隔。

EN

回答 2

Stack Overflow用户

发布于 2022-04-14 14:17:03

假设数组capture包含输出,为什么不尝试类似于.

代码语言:javascript
运行
复制
declare capture=() ; for item in $items; do 
    # some code
    capture+=( "$(echo "main/$category:${{ env.VERSION}}" | cut -d '/' -f2-)" )   
done

..。之后..。

代码语言:javascript
运行
复制
local l ; for l in "${capture[@]}" ; do
  .
  .
  .
done

FWIW,如果不使用$item变量,我就看不到循环的意义.就像壳检查会告诉你的。

票数 0
EN

Stack Overflow用户

发布于 2022-04-14 14:48:31

根据OP的预期结果有几种方法.

更糟糕的将输出捕获到一个变量中,嵌入了linefeed:

代码语言:javascript
运行
复制
$ myvar=$(for item in $items; do echo "main/category/$item:$version" | cut -d '/' -f3-; done)          
$ typeset -p myvar
declare -- myvar="item1:1649947065
item2:1649947065
item3:1649947065"

更糟的是,将输出捕获到一个变量中,行提要转换为空格:

代码语言:javascript
运行
复制
$ myvar=$(for item in $items; do echo "main/category/$item:$version" | cut -d '/' -f3-; done | tr '\n' ' ')
$ typeset -p myvar
declare -- myvar="item1:1649947065 item2:1649947065 item3:1649947065 "

消除子进程调用和不必要的cut ..。

更好地将输出捕获到具有字符串间隔的单个变量中:并让for循环将文本附加到变量的末尾:

代码语言:javascript
运行
复制
$ delim=""
$ myvar=""

$ for item in $items
do
    myvar="${myvar}${delim}${item}:${version}"
    delim=" "
done

$ typeset -p myvar
declare -- myvar="item1:1649947065 item2:1649947065 item3:1649947065"

最佳将输出捕获到数组中:

代码语言:javascript
运行
复制
$ myarr=()

$ for item in $items
do
    myarr+=( "${item}:${version}" )
done

$ typeset -p myarr
declare -a myarr=([0]="item1:1649947944" [1]="item2:1649947944" [2]="item3:1649947944")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71872906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档