bash Чтение массива из файла - PullRequest
0 голосов
/ 14 октября 2019

Я уже прочитал много вопросов, касающихся чтения и записи в ARRAY на bash. Я не смог найти решение своей проблемы.

На самом деле, у меня есть файл, который содержит путь к множеству файлов.

cat MyFile
> ~/toto/file1.txt
> ~/toto/file2.txt
> ~/toto/file3.txt
> ~/toto/file4.txt
> ~/toto/file5.txt

Я заполняю массив ARRAY для храненияэтот список:

readarray ARRAY < MyFile.txt

или

while IFS= read -r line
do 
   printf 'TOTO %s\n' "$line"
   ARRAY+=("${line}")
done <MyFile.txt

или

for line in $(cat ${MyFile.txt}) ; 
    do echo "==> $line"; 
    ARRAY+=($line) ; 
done

Все эти методы хорошо работают для заполнения массива,

echo "0: ${ARRAY[1]}"
echo "1: ${ARRAY[2]}"
> 0: ~/toto/file1.txt
> 1: ~/toto/file2.txt

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

diff ${ARRAY[1]} ${ARRAY[2]}
diff: ~/toto/file1.txt: No such file or directory
diff: ~/toto/file2.txt: No such file or directory

, но при печати содержимого: echodiff $ {ARRAY [1]} $ {ARRAY [2]}

diff ~ / toto / file1.txt ~ / toto / file2.txt

и выполнитья получаю ожидаемый diff в файле diff ~ / toto / file1.txt ~ / toto / file2.txt

 3c3
 < Param = {'AAA', 'BBB'}
 ---
 > Param = {'AAA', 'CCC'}

, тогда как, если я заполняю ARRAY вручную таким образом:

ARRAY=(~/toto/file1.txt ~/toto/file2.txt)

diff работает хорошо.

У кого-нибудь есть идеи? Большое спасибо С уважением, Томас

1 Ответ

1 голос
/ 14 октября 2019

Расширение тильды не происходит, когда вы используете подстановку переменных из ${ARRAY[index]}.

Укажите полный путь к файлам в MyFile.txt и снова запустите ваш код.

...