循环遍历两个变量列表并将相应的顺序分配给命令

循环遍历两个变量列表并将相应的顺序分配给命令

如果我有两个变量列表:(注意在第二个列表中,空格是元素分隔符)

l1=(su1 su2 su3 su4)
l2=(1,2,3 4,3,2 4,7,6 3,2,1)

我想循环遍历两个列表,以便执行一个命令,其意义是su11,2,3su24,3,2、、su34,7,6su43,2,1

因此,如果 的每个元素l1对应于一个目录,并且我想做类似的事情:

#!/bin/bash
directory=/some/path
l1=(su1 su2 su3 su4)
l2=(1,2,3 4,3,2 4,7,6 3,2,1)
for i in "${l1[@]}"
do
for e in "${l2[@]}"
do
cd $directory/$i
echo "${e}" > file.txt
done
done

换句话说,cd 进入每个目录l1并使用相应的元素创建一个文件l2

上面是我尝试过的,但它只是使用l2每个目录中的第一个元素创建一个文件l1

答案1

用这个:

# first create those directories
mkdir "${l1[@]}"
# set counter value to 0
c=0
# loop trough the array l1 (while the counter $c is less than the length of the array $l1)
while [ "$c" -lt "${#l1[@]}" ]; do
  # echo the corresponding value of array l2 to the file.txt in the directory
  echo "${l2[$c]}" > "${l1[$c]}/file.txt"
  # increment the counter
  let c=c+1
done

结果:

$ cat su1/file.txt 
1,2,3
$ cat su2/file.txt 
4,3,2
$ cat su3/file.txt 
4,7,6
$ cat su4/file.txt 
3,2,1

相关内容