2015-01-13 1 views
3

Почему ошибка находит: пути должны предшествовать выражению: trigger.txt, когда получено несколько результатов из «find», в подпроцессе, но не при возврате одного результата?Почему ошибка «find: paths должно предшествовать выражению» запускается, когда несколько результатов возвращаются из «find»

В каталоге представлены три файла.

ls 
input2.txt input.txt input.log 

Существует только один файл, соответствующий запрос найти и результат может быть назначен $ Foo

$ foo=$(find . -name *.log) 
echo $foo 
./plot.log 

Когда > 1 reults возвращается найти бросок в ошибке.

$ foo=$(find . -name *.txt) 
find: paths must precede expression: input.txt 

Я не понимаю, почему это происходит.

ответ

13

Вам нужно quote специальных символов, потому что шарики являются expanded перед запуском команды:

find . -name '*.txt' 

Чтобы увидеть, как подстановка работает, попробуйте, например echo *.txt - это будет только фактически печати *.txt если нет файлов в текущем каталоге, заканчивающемся .txt.

+1

Без указания команды расширяется до 'find. -name input.txt two.txt three.txt ... ', который затем находит дополнительные пути для поиска. –