Используйте $(command)
для выполнения command
и замены его вывода вместо этой конструкции.
list=$(find "$PATH" -name '*.txt')
И чтобы получить доступ к переменной, поставьте $
перед именем, а не @
(ваш опыт показывает perl
).
for newfiles in $list; do
echo "$newfiles"
done
Однако опасно анализировать вывод find
подобным образом, потому что вы получите неправильные результаты, если какое-либо из имен файлов содержит пробел - он будет обрабатываться как несколько имен. Лучше передать по конвейеру:
find "$PATH" -name '*.txt' | while read -r newfiles; do
echo "$newfiles"
done
Также обратите внимание, что вы должны заключать в кавычки любые переменные, которые вы не хотите разбивать на несколько слов, если они содержат пробелы.
И избегайте использования имен переменных в верхнем регистре. Это обычно зарезервировано для переменных среды.