web-dev-qa-db-ja.com

bashの空の中括弧とセミコロン

何をする

{} \;

文字列はbashを意味しますか?

たとえば、すべてのファイルを名前で検索して削除するには、実行する必要があります

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

この文字列は何をしますか?

5
spiderface

{};は両方ともbashで特別な意味を持ちますが、findのコンテキストでは、実際にこれら2つを解釈するのはfindです(実際、これら2つを解釈するのはfindです)。

まず、-execfindのアクションです。 {}および;は、find-exec述部の特別なパラメーターです。

-execアクションの構文は次のとおりです。

-exec command ;

または

-exec command {} + 

そのため、{};が事前にシェルによって解釈されないようにする必要があります。

find .... -execのコンテキスト:

  • {}は、find式の結果(この場合はfind . -name "FILE-TO-FIND")を示します(含む)。空の中括弧{}にはシェルにとって特別な意味がないため、{}をエスケープせずに逃げることができます。

  • bash;をコマンドの終わりとして扱うため、\を使用してこれをエスケープする必要があります。つまり、\;は、bash自体ではなく-execによって解析できます。

7
heemayl