Ошибка сохранения текстовой строки в массив

Я пытаюсь извлечь местоположение каталога из location.txt и сохранить его в массив, но это выглядит не очень хорошо. Когда я выполняю сценарий,

я получаю эту ошибку

  ./test.sh: line 7: location.txt: No such file or directory bina@ajax $ ./test.sh
  ./test.sh: line 5: =/apps/IBM: No such file or directory
  ./test.sh: line 5: =/usr/home: No such file or directory
  ./test.sh: line 11: Unix_Array[0]: command not found

  ./test.sh: line 11: Unix_Array[1]: command not found

Вот мой код

   #!/bin/sh

   counter=0
   while read -r line; do
       ${Unix_Array[${counter}]}=$line;
       let counter=counter+1;
   done < location.txt

   for ((i=0 ;counter > i; i++))
   do
       echo $(Unix_Array[$i])
   done 

и текстовый файл location.txt

   /apps/IBM
   /usr/home
   /var/login

Может кто-нибудь сказать мне, что я сделал не так? Возможно, я сделал одну глупую ошибку, которую не знаю...(Я действительно новичок в UNIX)

заранее спасибо

2 ответа

Решение

Просто удали свою первую ${} на ${Unix_Array[${counter}]}=$line; поскольку вы просто хотите присвоить массиву, а не присвоить и получить его значение, ваш фиксированный скрипт будет выглядеть так:

#!/bin/sh

counter=0
while read -r line; do
   Unix_Array[${counter}]=$line;
   let counter=counter+1;
done < location.txt

for ((i=0 ;counter > i; i++))
do
     echo ${Unix_Array[$i]}
done

Если вы используете Bash 4 или более поздней версии, вы можете отказаться от while read цикл в пользу readarray команда:

readarray Unix_Array < location.txt

for line in "${Unix_Array[@]}"; do
    echo "$line"
done
Другие вопросы по тегам