2016-08-23 4 views
0

У меня возникли проблемы с чередованием файлов в каталоге с bash. Я совершенно новичок в bash и не могу понять, что у меня есть.bash - looping через каталог

Когда я просматриваю файлы в директории, о которой я явно упоминаю, проблема не возникает. Однако, когда переменные используются, чтобы описать каталог, чтобы пройти через петлю, все, кажется, не работает.

Рабочий цикл, который находит все файлы в ~/Desktop/:

for file in ~/Desktop/*; do 
    echo "$file" 
done 

Однако следующий, кажется, не работает и отображает только ~/Desktop/*,

DEST="~/Desktop/*"  

for file in "$DEST"; do 
    echo "$file" 
done 

Надеется, что-то небольшое, что Мне здесь не хватает. Моя основная цель заключается в том, что я хотел бы иметь возможность перебирать произвольное местоположение, которое может быть сохранено в конфигурационном файле каких-либо ролей.

Заранее благодарен!

+1

Цитаты предотвращают глотание. – Cyrus

ответ

-2

Согласно the reference manual, расширение тильды не работает в кавычках. Самая простая альтернатива - вместо этого использовать $ HOME.

Если предположить, что код в вопросе работает отдельно от тильды (что возможно, если файлы в ~/Desktop все очень простые имена), то вы можете изменить свой код, чтобы работать без тильды:

DEST="$HOME/Desktop/*"  

for file in "$DEST"; do 
    echo "$file" 
done 

Однако, если вы это сделаете, вы, скорее всего, столкнетесь с проблемами расширения имен файлов (globbing). Вы бы лучше всего бросить кавычки повсюду, так как они не нужны. Кроме того, задержите расширение имени файла до тех пор, пока оно не понадобится на самом деле:

DEST=~/Desktop 

for file in $DEST/*; do 
    echo $file 
done 
+3

Я предлагаю заменить '' $ DEST '' на '$ DEST'. – Cyrus

+0

Я тоже, но я делал наименьшее количество изменений из кода OPs. –

+0

Да, это похоже на работу. Спасибо. Я соглашусь с приведенным выше ответом, хотя предложение Кира было необходимо для его работы. Быстрый вопрос, когда следует/не следует использовать кавычки? –