Подтвердить что ты не робот

Чтение имен файлов в массив

Я хочу запустить ls, чтобы получить список файлов, а затем прочитать результат в массив, где каждый элемент соответствует имени файла. Возможно ли это?

4b9b3361

Ответ 1

Не используйте ls, он не предназначен для этой цели. Используйте globbing.

shopt -s nullglob
array=(*)
array2=(file*)
array3=(dir/*)

Опция nullglob заставляет массив быть пустым, если нет согласованного.

Ответ 2

Далее будет создан массив arr с выходом ls в текущем каталоге:

arr=( $(ls) )

Гораздо лучше и безопаснее ls вы можете использовать echo *:

arr=( * )

echo ${#arr[@]} # will echo number of elements in array

echo "${arr[@]}" # will dump all elements of the array

Ответ 3

Собственно, ls - это не путь. Попробуйте следующее:

declare -a FILELIST
for f in *; do 
    #FILELIST[length_of_FILELIST + 1]=filename
    FILELIST[${#FILELIST[@]}+1]=$(echo "$f");
done

Чтобы получить имена из массива:

echo ${FILELIST[x] 

-или -

echo ${FILELIST[@]:x:y}

где x и y - первый элемент для получения и количество элементов после этого.

Для большого руководства по массивам bash см.: http://www.thegeekstuff.com/2010/06/bash-array-tutorial/

Ответ 4

Попробуйте это,

PATH="" # could set to any absolute path
declare -a ARRAY=(${PATH}/*)

Я предполагаю, что вы вытащите ненужный материал из списка позже.