Ошибка сохранения текстовой строки в массив
Я пытаюсь извлечь местоположение каталога из 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