Компьютеры, программы, интернет => Программы и сети => Тема начата: Shaman от 03 Нояб., 2023, 17:51
Название: Есть ли возможность вывод basename добавить как элементы массива?
Отправлено: Shaman от 03 Нояб., 2023, 17:51
Уважаемые есть необходимость написать bash скрипт одним из элементов которого будет сканирование каталога и вывод определённых имён файлов (без расширения) ка элементов массива. Планирую использовать утилиту basename.
По факту это строка 1\n2\n4, но её нужно преобразовать в массив вида
imyaMassiva=(1 2 4)
Чем можно это сделать в рамках bach без установки экзотических утилит?
Название: Re: Есть ли возможность вывод basename добавить как элементы массива?
Отправлено: zenon от 03 Нояб., 2023, 23:22
printf же есть, скриптом вывод basename направить в переменную, что-то с ней сделать и printf`ом вывести.... ну наверное, может всё это и sed`ом делается, но в нём не силён.
Название: Re: Есть ли возможность вывод basename добавить как элементы массива?
Отправлено: Shaman от 05 Нояб., 2023, 02:37
Благодарю, случайно сам разобрался. Если сделать вот так:
Лирическое отступление:
Параметры для sed нашел в интернете ,что выполняют операторы я толком не понял, man по команде весьма куцый и народ в интернете тоже даёт немного разные трактовки. Вот например одна:
a: Добавляет задачи
b: разветвляет содержимое файла
N: переход на следующую строку.
$!: предотвращает применение замены в последней строке.
А вот другая (https://askubuntu.com/questions/461191/what-is-the-meaning-of-an-in-a-sed-command)
В целом они похожи, но однозначного понимания не вносят. Если кто-то знает точнее, пожалуйста поясните.
[свернуть]
sed в данном случае заменяет \n на то что указано вторым аргументом в параметре s, в моём случае "пробел". А значит вывод получается вот таким:
И если его вставить в массив то bash поймёт его как элементы массива. Скрипт в итоге получается таким: