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[@]}"