Использование перенаправления для записи содержимого переменной в файл не работает в сценарии for l oop in Bash? - PullRequest
0 голосов
/ 19 июня 2020
#!/bin/bash

files=$( grep " jane " ../data/list.txt)

for f in $files; 
do 
    if test -e f; 
    then
        echo f >> oldFiles.txt;
    else
        echo "File doesn't exist";
    fi;
done

Этот код выполняет поиск «jane» в содержимом файла list.txt и сохраняет результаты в файлах. Этот файл заполнен адресами пути к каталогам. Некоторые из адресов пути к каталогу включают слово «jane».

После этого for l oop выполняет итерацию по файлам переменных файлов и по одному запускает тест, чтобы проверить, соответствует ли путь к каталогу действителен и действительно существует.

Если путь к каталогу существует, он копирует адрес в итераторе с помощью метода перенаправления в файл oldFiles.txt

Когда я не создаю файл для запуска этот скрипт, и вместо этого просто используйте CLI напрямую для объявления переменной files и использования метода перенаправления, он работает. Так, например, когда я ввожу следующее в CLI напрямую:

files=$( grep " jane " ../data/list.txt) 

echo $files >> oldFiles.txt

Это выполняет свою работу. Но приведенный выше сценарий Bash не работает. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 25 июня 2020
#!/bin/bash
> oldFiles.txt

files=$( grep "jane" ../data/list.txt | cut -d' ' -f3)

for f in $files; do if test -e ~/$f; then echo $f >> oldFiles.txt; else echo "File doesn't exist"; fi; done

Сначала мы создаем файл oldFiles.txt с помощью команды> oldFiles.txt.

Затем мы вводим grep 'jane' в каталоге, в котором нам нужно искать в именах файлов слово 'jane '.

После этого мы сохраняем результаты в переменной с именем files.

переменная files теперь должна содержать строку путей, извлеченных из каталога ../data/ со словом' jane ' в именах путей.

Затем вы запускаете al oop в переменной files, чтобы прочитать имена путей построчно, чтобы проверить имена путей, чтобы увидеть, существуют ли они на самом деле или нет. Если они существуют, переведите их в oldFiles.txt с помощью команды >>.

0 голосов
/ 19 июня 2020

Разница между вашими двумя примерами кода в том, что вы используете $ при использовании переменных. Это не обязательно и обязательно. Поэтому везде, где вы используете f в качестве аргумента (для вывода и проверки), вы должны ставить перед ним префикс $. Однако $ не требуется при присвоении переменной.

...