Если вы хотите извлечь имя файла, используйте базовое имя, как предложил Фредрик.Вот решение:
#!/bin/sh
source=$1
target=$2
for i in "$source"/*
do
name=$(basename $i)
echo $name
done
Это решение работает, но в нем есть ошибка: если в каталоге или файле содержится пробел в его имени, значит, он работает неправильно.Вот мое пересмотренное решение:
#!/bin/sh
source=$1
target=$2
pushd "$source" >/dev/null 2>&1
for name in *
do
echo $name
done
popd >/dev/null 2>&1
Обратите внимание, что я использую pushd / popd для входа в исходный каталог и из него.Поскольку я уже нахожусь в исходном каталоге, мне не нужно называть basename.