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

时间:2018-05-03 12:49:07

标签: linux bash awk sed scripting

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

我已经尝试了两个for循环,但它循环给定变量与循环中的每个其他第二个变量!

试过

for i in 4k 1m 1m
do
   for j in 1m 2m 4m
   do
   echo $i $j
   done
done

输出

4k 1m
4k 2m
4k 4m
1m 1m
1m 2m
1m 4m
1m 1m
1m 2m
1m 4m

所需的输出

4k 1m
1m 1m
1m 2m

2 个答案:

答案 0 :(得分:1)

我假设你的名单存放在其他地方;否则,解决方案是从适当的文档中读取:

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并没有为&#34; zip&#34;提供特别干净的方式。两个阵列在一起。您可以做的最好的事情是假设两个列表具有相同的索引,并迭代这些索引:

list1=(4k 1m 1m)
list2=(1m 2m 4m)
for k in "${!list1[@]}"; do
  i=${list1[k]}
  j=${list2[k]}
  echo "$i" "$j"
done

答案 1 :(得分:0)

$ 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