Поскольку необходимо выполнить ls
:
for i in $(ls ...); do
echo $i
done
Кроме того, вместо этого вы можете рассмотреть возможность смещения оболочки:
for i in /home/svn/*; do
echo $i
done
... или find
, что позволяет очень тонко выбрать свойства предметов для поиска:
for i in $(find /home/svn -type f); do
echo $i
done
Кроме того, если вы можете иметь пробелы в сегментах пути или самих именах файлов, используйте цикл while (предыдущий пример настроен):
find /home/svn -type f|while read i; do
echo $i
done
while
читает построчно, так что пробел сохраняется.
Относительно вызова basename
у вас есть два варианта:
# Call basename
echo $(basename $i)
# ... or use string substitution
echo ${i##*/}
Для объяснения замены: ##
удаляет самый длинный шаблон с передней привязкой из строки, #
до первого совпадения с шаблоном, %%
самый длинный шаблон с задней привязкой и %
первый с задней привязкой полный матч.