Jak zrobić zmienne używane w globalnym czytaniu dla skryptu

1

Chcę odczytać plik z danymi uporządkowanymi w kolumnie.
W skrypcie, który piszę, używam readpolecenia.

Plik wejściowy składa się z następujących wierszy:

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

To, czego używam do czytania, to coś takiego

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

Do tej pory odczytuje wiersz po wierszu i przypisuje XX:XX:XX:XX:XXdo a i PQRTSdo bpierwszej iteracji whilecyklu, po YY:YY:YY:YY:YYdo ai ABCDEdo bdrugiej iteracji i tak dalej.

Teraz moje pytania to:

  1. Jak mogę używać ai bjako zmiennych globalnych?
  2. Chcę przypisać XX:XX:XX:XX:XX, YY:YY:YY:YY:YYaby móc używać ich w różnych funkcjach.
srj0408
źródło
1
Co dokładnie rozumiesz przez „zmienne globalne”? Możesz po prostu przypisać $ado czegoś innego w pętli.
slhck

Odpowiedzi:

0

Wygląda na to, że potrzebujesz Do tego celu możesz napisać skryptbash arrays

#!/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. To zależy od tego, co masz na myśli global. Niestety nie można exportich po prostu skryć. Od man bashdalej bash 4.3.11(1)-releasemożesz czytać.

    Zmienne tablicowe nie mogą (jeszcze) zostać wyeksportowane.

  2. Wewnątrz skryptu możesz użyć tablicy jako normalnej zmiennej. Zamiast tego echo $amusisz odwoływać się do nich za pomocą czegoś takiego jak echo ${a[0]}lub echo ${b[2]}...
    Pamiętaj, że musisz {}je zabezpieczyć.
Hastur
źródło