Variável dentro de uma variável em um loop

0

Eu tenho uma pergunta sobre como uma variável pode ser chamada com outro nome de variável dentro de um loop.

O script a seguir não funciona:

#!/bin/bash
# Comparing test1.txt with test2.txt, test1.ini with test2.ini, test1.conf with test2.conf

FIRSTFILE1=test1.txt;
SECONDFILE1=test2.txt;
FIRSTFILE2=test1.ini;
SECONDFILE2=test2.ini;
FIRSTFILE3=test1.conf;
SECONDFILE3=test2.conf;

for NUM in {1..3};
do
  diff --brief <(sort $FIRSTFILE$NUM) <(sort $SECONDFILE$NUM) > /dev/null
  value=$?
  if [ $value -eq 1 ]
  then
    echo "different"
  else
    echo "identical"
  fi
done
    
por JJadmin 16.09.2015 / 20:42

2 respostas

1

Não é uma explicação para a questão se é estritamente sobre a combinação de variáveis em uma, mas a seguinte daria a você um resultado funcional de iteração em seus arquivos:

for EXT in txt ini conf;
do
  diff --brief <(sort test1.${EXT}) <(sort test2.${EXT}) > /dev/null
  value=$?
  if [ $value -eq 1 ]
  then
    echo "different"
  else
    echo "identical"
  fi
done
    
por 16.09.2015 / 21:07
2

Você está procurando uma expansão de parâmetro indireta. Você pode conseguir isso no bash usando um ponto de exclamação.

#!/bin/bash                                                                        
FIRSTFILE1=test1.txt;
SECONDFILE1=test2.txt;
FIRSTFILE2=test1.ini;
SECONDFILE2=test2.ini;
FIRSTFILE3=test1.conf;
SECONDFILE3=test2.conf;

for NUM in {1..3};
do
    a=FIRSTFILE$NUM
    b=SECONDFILE$NUM
    echo ${!a}
    echo ${!b}
done

Você precisará de mais alguns testes para encontrar um oneliner :). Para obter mais informações, consulte: link

    
por 16.09.2015 / 21:05

Tags