Como fazer variáveis usadas em leitura global para o script

1

Eu quero ler um arquivo com os dados ordenados na coluna.
No script que estou escrevendo, uso o comando read .

O arquivo de entrada é feito por linhas como as seguintes:

XX:XX:XX:XX:XX   PQRTS
YY:YY:YY:YY:YY   ABCDE
ZZ:ZZ:ZZ:ZZ:ZZ   FGHIJ

O que estou usando para ler é algo assim

while read a b; do 
echo $a
echo $b
done < filename.txt

Até agora, lê linha por linha e atribui XX:XX:XX:XX:XX a a e PQRTS a b na primeira iteração do ciclo while , depois de YY:YY:YY:YY:YY a a e ABCDE a b na segunda iteração e assim por diante.

Agora minhas perguntas são:

  1. Como posso usar a e b como variáveis globais?
  2. Desejo atribuir XX:XX:XX:XX:XX , YY:YY:YY:YY:YY para que eu possa usá-los em diferentes funções.
por srj0408 13.06.2014 / 06:52

1 resposta

0

Parece que você precisa de bash arrays
Para o seu propósito, você pode escrever um script como

#!/bin/bash
i=0
while read a[$i] b[$i]; do 
  echo ${a[$i]}                # Print the current one a
  echo ${b[$i]}                # Print the current one b 
  i=$[ i+1 ]                   # Increment i
done < filename.txt  
#  do other stuffs...          # if you want
echo "$[ $i -1 ] Items read "  # The number of lines read
echo The second a was ${a[1]}  # Array starts from 0
echo Those are all b  ${b[*]}  # You can print all together
  1. Depende do que você quer dizer com global . Infelizmente você não pode simplesmente export deles fora do seu script. A partir do man bash on bash 4.3.11(1)-release você pode ler.

    Array variables may not (yet) be exported.

  2. Dentro do seu script você pode usar o array como variável normal. Em vez de echo $a , você deve se referir a eles com algo como echo ${a[0]} ou echo ${b[2]} ...
    Note que você precisa colocar {} para protegê-los.
por 25.06.2014 / 18:58