2017-02-17 16 views
1

В bash Мне нужно поместить все имена файлов заданного каталога в массив. Кроме того, мне нужно, чтобы каждый файл был одним из элементов массива, поэтому если мой каталог содержит 3 файла: file1.txt, file2.txt и file3.txt, мой массив будет выглядеть так.Поместите все имена файлов в каталог в массив

echo $arr 
{file1.txt, file2.txt, file3.txt} 

ответ

5

Создать переменную массива с var=(...). Глобом для всех файлов в текущем каталоге является *. Вместе:

files=(*) 
echo "${files[@]}" 

Вы можете цикл по массиву:

for file in "${files[@]}"; do 
    echo "$file" 
done 

или доступа к отдельным элементам:

echo "${files[0]}" 
echo "${files[1]}" 
echo "${files[2]}" 

Обратите внимание на разумное использование двойных кавычек. Это гарантирует, что файлы с пробелами и другими специальными символами обрабатываются правильно.

+2

Это хорошо, чтобы установить 'shopt -s nullglob' перед тем' файл = (*) ', так что массив не в конечном итоге получить' '* элемент на пустых каталогах. – codeforester

0

Самое простое решение заключается в использовании:

shopt -s nullglob dotglob 
files=(*) 

 Смежные вопросы

  • Нет связанных вопросов^_^