我是在github操作中这样做的,我有一个for循环
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)
)
item1:1649946431 item2:1649946431 item3:1649946431
等等,所以它是一个字符串,它的值被空格分隔。
发布于 2022-04-14 14:17:03
假设数组capture
包含输出,为什么不尝试类似于.
declare capture=() ; for item in $items; do
# some code
capture+=( "$(echo "main/$category:${{ env.VERSION}}" | cut -d '/' -f2-)" )
done
..。之后..。
local l ; for l in "${capture[@]}" ; do
.
.
.
done
FWIW,如果不使用$item
变量,我就看不到循环的意义.就像壳检查会告诉你的。
发布于 2022-04-14 14:48:31
根据OP的预期结果有几种方法.
更糟糕的将输出捕获到一个变量中,嵌入了linefeed:
$ 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"
更糟的是,将输出捕获到一个变量中,行提要转换为空格:
$ 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
循环将文本附加到变量的末尾:
$ 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"
最佳将输出捕获到数组中:
$ 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")
https://stackoverflow.com/questions/71872906
复制相似问题