я был дан совет, чтобы использовать file globbing вместо логинсервера в скриптах Bash, в моем коде я следовал инструкциям и заменить array=($(ls))
на:Bash заменить Ls с цикл
function list_files() { for f in *; do [[ -e $f ]] || continue done }
array=($(list_files))
Однако новая функция DOEN» t возвращай что-нибудь, я делаю что-то не так здесь?
'$ (function)' заменяется на то, что функция выводит на stdout. Ваша функция ничего не печатает. – Barmar
Как только вы исправите это, оно не решит вашу проблему. Разбор вывода функции 'list_files' имеет ту же проблему, что и анализ вывода' ls'. Если имя файла содержит пробелы, оно будет считаться двумя именами при назначении массиву. Вам нужно сделать все, что угодно, внутри цикла 'for'. В примере на этой странице есть «...», в котором вы делаете то, что хотите, с каждым файлом. – Barmar
ОК, поэтому проблема выше в том, что тест работает, но на самом деле он ничего не делает. Он просто видит, что файлы существуют, а затем тихо перемещается. Если вы положили
echo $f
до теста[[ -e $f ]]
, он проверяет обнаруженные файлы. Однако это не работает так, как мне нужно, чтобы работать, когда в коде передается эхо-оператор; Скрипт перекликается с файлами, а затем заполняет массив, который снова повторяет те же файлы ... Когда я удаляю оператор эха, массив не заполняется и ничего не выводится из сети. Есть ли способ передать файлы в цикле for в переменную или –