Вывести список подходящих файлов в массив - PullRequest
2 голосов
/ 01 мая 2020

Я пытаюсь создать скрипт, который перечисляет доступные версии файла, например:

/home/test/file1.0
/home/test/file1.1
/home/test/file2.0
/home/test/file2.1
...
/home/test/file2.14

Мне нужен массив, содержащий все значения: 1.0, 1.1, 2.0, 2.1, ..., 2.14. Теперь я пришел к следующему:

VERSIONS=$(ls /home/test/file* | egrep '[0-9]+\.[0-9]+' | cut -c 16-);

Что-то работает, но в результате получается строка вроде этой

1.0 1.1 2.0 2.1 ... 2.14

Хотя мне нужен массив. Как получить результат в виде массива значений вместо одной строки?

Ответы [ 2 ]

3 голосов
/ 01 мая 2020

Не используйте ls. Используйте подстановочный знак для заполнения массива, затем используйте расширение параметра, чтобы удалить префикс из всех элементов массива:

files=( file* )
versions=( "${files[@]#file}" )
2 голосов
/ 01 мая 2020

Вам необходимо использовать массив.

#!/usr/bin/env bash

shopt -s extglob

versions=(/home/test/file*)

printf '%s\n' "${versions[@]##*+([[:alpha:]])}"
  • Требуется опция оболочки extglob bash.

Для сохранения, чтобы сохранить этот вывод.

array=("${versions[@]##*+([[:alpha:]])}")

Ваша версия может быть сделана с чем-то вроде

versions=(/home/test/file*)

mapfile -t array < <(printf '%s\n' "${versions[@]}" | egrep '[0-9]+\.[0-9]+' | cut -c 16-)

Теперь "${array[@]}" имеет значения, которые вас интересуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...