Bash for loop over array с файлами из (*) показывает только первый элемент

Я хочу поместить файлы текущего каталога в массив и отобразить каждый файл с помощью этого скрипта:

#!/bin/bash

files=(*)

for file in $files
do
    echo $file
done

# This demonstrates that the array in fact has the values from (*)
echo ${files[0]}  ${files[1]} 

echo done

Выход:

echo.sh
echo.sh read_output.sh
done

Кто-нибудь знает, почему в цикле for печатается только первый элемент?

1 ответ

Решение

$files расширяется до первого элемента массива. Пытаться echo $files, он будет печатать только первый элемент массива. Цикл for печатает только один элемент по той же причине.

Чтобы развернуть все элементы массива, нужно написать как ${files[@]},

Правильный способ перебора элементов массива Bash:

for file in "${files[@]}"
Другие вопросы по тегам