Пустые фигурные скобки и точка с запятой в bash [дубликат]

На этот вопрос уже есть ответ:

Что означает

{} \;

строка в bash?

Я видел это пару раз, например, чтобы найти и удалить все файлы по имени, которое нужно execute

find . -name "FILE-TO-FIND" -exec rm -rf {} \;

Что делает эта строка?

5
задан 19 December 2015 в 22:46

1 ответ

Оба {} и ; имеют особое значение в bash, но в контексте find именно find фактически интерпретирует эти два (на самом деле мы хотим, чтобы find интерпретировал эти два).

Прежде всего, -exec является действием find. {} и ; являются специальными параметрами для предиката -exec из find.

Синтаксис для действия -exec:

-exec command ;

или

-exec command {} + 

. Поэтому нам нужно не допустить интерпретации {} и ; оболочкой заранее .

В контексте find .... -exec:

  • {} указывает (содержит) результат (ы) из выражения find, то есть find . -name "FILE-TO-FIND" в данном случае. Обратите внимание, что пустые фигурные скобки {} не имеют особого значения для оболочки, поэтому мы можем уйти без экранирования {}

  • Поскольку bash рассматривает ; как конец команды нам нужно избежать этого с помощью \, то есть \;, чтобы его можно было проанализировать с помощью -exec, а не с помощью bash.

7
ответ дан 23 November 2019 в 09:06

Другие вопросы по тегам:

Похожие вопросы: