如果我有两个变量列表:(注意在第二个列表中,空格是元素分隔符)
l1=(su1 su2 su3 su4)
l2=(1,2,3 4,3,2 4,7,6 3,2,1)
我想循环遍历两个列表,以便执行一个命令,其意义是su1
与1,2,3
、su2
与4,3,2
、、su3
与4,7,6
、su4
与3,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