1

Я хочу прочитать файл с данными, упорядоченными в столбце.
В сценарии, который я пишу, я использую команду read .

Входной файл состоит из следующих строк:

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

То, что я использую, чтобы прочитать это что-то вроде этого

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

До сих пор он читает построчно и назначает XX:XX:XX:XX:XX для a и PQRTS для b на первой итерации цикла while , после YY:YY:YY:YY:YY для a и ABCDE для b в вторая итерация и так далее.

Теперь мои вопросы:

  1. Как я могу использовать a и b качестве глобальных переменных?
  2. Я хочу назначить XX:XX:XX:XX:XX , YY:YY:YY:YY:YY чтобы я мог использовать их в различных функциях.

1 ответ1

0

Кажется, вам нужны bash 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. Это зависит от того, что вы имеете в виду для global . К сожалению, вы не можете просто export их за пределы вашего сценария. От man bash на bash 4.3.11(1)-release вы можете прочитать.

    Переменные массива нельзя (пока) экспортировать.

  2. Внутри вашего скрипта вы можете использовать массив как обычную переменную. Вместо echo $a вы должны ссылаться на них с помощью чего-то вроде echo ${a[0]} или echo ${b[2]} ...
    Обратите внимание, что вам нужно поставить {} чтобы защитить их.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .