首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash中循环每个变量一次,而不是在第二个循环中循环每一个其他变量?

在bash中循环每个变量一次,而不是在第二个循环中循环每一个其他变量?
EN

Stack Overflow用户
提问于 2018-05-03 12:49:06
回答 2查看 56关注 0票数 1

如何在bash中循环每个变量一次?

我尝试了两个for循环,但是它正在循环给定的变量和循环中的其他第二个变量!

尝试过

代码语言:javascript
复制
for i in 4k 1m 1m
do
   for j in 1m 2m 4m
   do
   echo $i $j
   done
done

输出

代码语言:javascript
复制
4k 1m
4k 2m
4k 4m
1m 1m
1m 2m
1m 4m
1m 1m
1m 2m
1m 4m

期望输出

代码语言:javascript
复制
4k 1m
1m 1m
1m 2m
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-03 12:53:31

我假设您的列表存储在其他地方;否则,解决方案将是从此处的适当文档中读取:

代码语言:javascript
复制
while read -r i j; do
  echo "$i" "$j"
done <<EOF
4k 1m
1m 1m
1m 2m
EOF

但假设你有list1=( 4k 1m 1m)list2=(1m 2m 4m)bash没有提供一种将两个数组“压缩”在一起的特别干净的方法。最好的方法是假设这两个列表都有相同的索引,并对这些索引进行迭代:

代码语言:javascript
复制
list1=(4k 1m 1m)
list2=(1m 2m 4m)
for k in "${!list1[@]}"; do
  i=${list1[k]}
  j=${list2[k]}
  echo "$i" "$j"
done
票数 1
EN

Stack Overflow用户

发布于 2018-05-03 13:04:39

代码语言:javascript
复制
$ is=( 4k 1m 1m )
$ js=( 1m 2m 4m )
$ paste <(printf '%s\n' "${is[@]}") <(printf '%s\n' "${js[@]}")
4k      1m
1m      2m
1m      4m

请参阅https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50155500

复制
相关文章

相似问题

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