如何在 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
我假设您的列表存储在其他地方; 否则,解决方案是从适当的 here 文档中读取:
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
没有提供一种特别干净的方式来将两个数组"压缩"在一起。您能做的最好的事情是假设两个列表具有相同的索引,并迭代这些索引:
list1=(4k 1m 1m)
list2=(1m 2m 4m)
for k in "${!list1[@]}"; do
i=${list1[k]}
j=${list2[k]}
echo "$i" "$j"
done
$ is=( 4k 1m 1m )
$ js=( 1m 2m 4m )
$ paste <(printf '%sn' "${is[@]}") <(printf '%sn' "${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