looping através de duas listas de variáveis e atribuindo a ordem correspondente aos comandos

1

Se eu tiver duas listas de variáveis: (nota na segunda lista, o espaço é o elemento separador)

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

e quero percorrer as duas listas para que um comando seja executado no sentido de que su1 combina com 1,2,3 , su2 com 4,3,2 , su3 com 4,7,6 e su4 vai com 3,2,1

Portanto, se cada elemento de l1 corresponder a um diretório e eu quiser fazer algo como:

#!/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

Em outras palavras, grave em cada diretório em l1 e crie um arquivo usando o elemento correspondente em l2

O exemplo acima é o que eu tentei, mas ele cria um arquivo usando o primeiro elemento de l2 em cada diretório em l1

    
por FakeBrain 16.10.2015 / 21:35

1 resposta

2

Use isto:

# 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

O resultado:

$ 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
    
por 16.10.2015 / 21:54