Решено: загрузка массива из файла в bash (проблемы со звёздочками)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
vah
Сообщения: 31
ОС: deb-based

Решено: загрузка массива из файла в bash

Сообщение vah »

Добрый вечер!

Возникла необходимость подгузить в массив файл, содержащий строки, типа, "*/*". Если пытаться грзуить через arr=( $(cat file) ) , то звёздочки заменяются всевозможными каталогами и подкаталогами. Попытки вытащить данные циклом проваливаются также. Как бы этого избежать?
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Решено: загрузка массива из файла в bash

Сообщение skeletor »

Попробуй экранировать звёздочку символом '\'
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Решено: загрузка массива из файла в bash

Сообщение Uncle_Theodore »

Ничего никуда не подставляется.

Код: Выделить всё

[code]cat ff.txt
abra*/*cadabra
*/*lalala
*ieie*/*


Код: Выделить всё

cat rr.sh
#!/bin/bash

arr=( $(cat ff.txt))

for((i=0;$i<${#arr[@]};i++))
do
  echo ${arr[$i]}
done


Код: Выделить всё

./rr.sh
abra*/*cadabra
*/*lalala
*ieie*/*
Спасибо сказали:
Аватара пользователя
vah
Сообщения: 31
ОС: deb-based

Re: Решено: загрузка массива из файла в bash

Сообщение vah »

skeletor писал(а):
29.02.2008 12:19
Попробуй экранировать звёздочку символом '\'

Экранировать звёздочку в файле не хочется. Попытки сделать замену при подгрузке через cat | tr не увенчались успехом.

2Uncle_Theodore

Код: Выделить всё

$ cd
$ cat test.sh
#!/bin/bash
arr=( $(cat test.file))
for((i=0;$i<${#arr[@]};i++))
do
        echo ${arr[$i]}
done
$ echo '*/*' > test.file; cat test.file
*/*
$ chmod +x test.sh && ./test.sh
bin/ie6
Desktop/Home.desktop
Desktop/IE6.0.desktop
Desktop/System.desktop
Desktop/trash.desktop
docs/abs-book.html
#ну и всё, что есть в home глубины 2
Спасибо сказали:
Аватара пользователя
vah
Сообщения: 31
ОС: deb-based

Re: Решено: загрузка массива из файла в bash

Сообщение vah »

Решение оказалось до безобразия просто:
set -f
Спасибо сказали:
Ответить