1. Есть текстовый файл, содержащий n строк. Нужно его считать в массив. Как это сделать?
2. Для вычленения имени файла пытаюсь использовать basename, но в имени пути имеются пробелы. basename на них затыкается. Как преодолеть эту проблему.
P.S. Это не тестовые вопросы, мне нужно очень срочно закончить один проект, а я заткнулся на этих двух вещах
Пара вопросов по shell (очень срочно!)
1
array=()
i=0
while read -d $'\n' line
do
array[((i++))]=$line
done < test.txt
2. У меня нормально работает.
$ basename "/home/milfoil/.wine/drive_c/Program Files/Common Files/Microsoft Shared/VGX/VGX.dll"
VGX.dll
У меня нормально работает.
Это из командной строки, а из shell? Например, в таком виде:
basename $i $ext
где $i - переменная цикла (строка), а $ext - расширение файла? То есть, в случае $i="/usr/local/where is it?/assa.txt при значении $ext=".txt" я хочу в результате получить "assa", а не "where"
1. Есть текстовый файл, содержащий n строк. Нужно его считать в массив. Как это сделать?
2. Для вычленения имени файла пытаюсь использовать basename, но в имени пути имеются пробелы. basename на них затыкается. Как преодолеть эту проблему.
1) никак. не нужно использовать массивы для этой цели - они очень медленно работают.
2)
basename $i $ext
где $i - переменная цикла (строка), а $ext - расширение файла? То есть, в случае $i="/usr/local/where is it?/assa.txt при значении $ext=".txt" я хочу в результате получить "assa", а не "where"
$ basename "$i"
assa.txt
лично я просто прогоняю файл через sed, причём в вашем случае можно прогнать даже не файл, а вывод ls.
Есть ещё вариант - использовать find, там есть ключик -printf, который позволит сразу получить нужные строчки. Без того, что-бы загонять список в файл, потом в массив, а потом его ковырять так, как это делаете вы...
Это из командной строки, а из shell? Например, в таком виде:
это вы кавычки забыли поставить.
что-бы пробелы не мешались, надо либо заключать имя "в кавычки", но тогда мешаются многие другие спец-символы, либо в 'другие кавычки', но тогда переменные не раскрываются, либо поменть значение IFS, и тогда лексемы у вас будут делится не пробелами, а другими символами.
Без того, что-бы загонять список в файл, потом в массив, а потом его ковырять так, как это делаете вы...
Я бы с удовольствием, но мне нужно отобразить имя файла без расширения, поскольку нужно его в меню отобразить. Есть задача: существует некоторое количество итемов, это количество я заранее не знаю. Нужно отобразить все имена используя dialog.
[quote=drBatty]Без того, что-бы загонять список в файл, потом в массив, а потом его ковырять так, как это делаете вы...
Я бы с удовольствием, но мне нужно отобразить имя файла без расширения, поскольку нужно его в меню отобразить. Есть задача: существует некоторое количество итемов, это количество я заранее не знаю. Нужно отобразить все имена используя dialog.[/quote]
Для таких случаев - выделение имени, расширения или любого поля - удобно использовать awk.
Пётр.
Peter,
Ага, или sed или perl. Я же написал -средствами shell