Я хочу запустить ls
, чтобы получить список файлов, а затем прочитать результат в массив, где каждый элемент соответствует имени файла. Возможно ли это?
Чтение имен файлов в массив
Ответ 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}/*)
Я предполагаю, что вы вытащите ненужный материал из списка позже.