'{}'';'特別な意味と検索

'{}'';'特別な意味と検索

カスタムアクションLinuxのBash機能です。書くとLinuxターミナルで

root@localhost: find ~ -type f -name 'foo*' -ok ls -l '{}' ';'

次に、次のように始まるファイル名があることを確認し、fooファイルの詳細を表示します。

< ls ... /home/me/bin/foo > ? y
-rwxr-xr-x 1 me me 224 2011-10-29 18:44 /home/me/bin/foo
< ls ... /home/me/foo.txt > ? y
-rw-r--r-- 1 me me 0 2012-09-19 12:53 /home/me/foo.txt

押すたびに、yこれらの結果が表示されます。

私の質問はこの文字の特別な意味は何ですか'{}' ';'

{}現在のパスを表すコマンドを読んで終了しましたが、';'bashでは決して';'

答え1

これらはbashの一部ではありませんfind独立プログラムそして、実行のためにbashやPOSIXシェルも必要ありません。たとえば、bashとうまく機能しますfishが、POSIXと互換性がなく、bashと同じ構文規則に従いません。実際にはシェルなしで使用できます(例:プログラミングコンテキストで)。

そのため(POSIXシェルを使用する場合、またはこの場合は同様の規則を持つシェルを使用している場合)、いくつかのパラメータで引用符を使用したいと思います。findたとえば、find . -name '*foo'一重引用符内の文字列は、置換または拡張を実行せずに渡されます。シェルはこれについて何もしません。 bashで使用しfind . name *foo、そのglobに一致するファイルが現在のディレクトリに存在する場合は、何もしないことがあります。

異なるルールを持つシェルを使用している場合は、それらを使用するときにこれらのルールを考慮する必要がありますfind。たとえば、実際に{}引用する必要はありませんが、bashを使用して同じことをすることがfishできますfind: missing argument to '-exec'

中かっこは bash で意味があります。パラメーターの置換/拡張およびコマンドのグループ化に使用されます。私は同様の目的を果たしますfindが、解析するのではfindありませんbash

答え2

{中かっこと}セミコロンがありますが、; するbashでは特別な意味があります。この場合、findこれを解釈するのはシェルではなくコマンド自体です。コマンドはそのコマンドと同じ構文を使用するため、-okマニュアルfindページ()のこのセクションで-exec完全な指示を見つけることができます。man find

   -exec command ;
          Execute  command;  true  if 0 status is returned.  All following
          arguments to find are taken to be arguments to the command until
          an  argument  consisting of `;' is encountered.  The string `{}'
          is replaced by the current file name being processed  everywhere
          it occurs in the arguments to the command, not just in arguments
          where it is alone, as in some versions of find.  Both  of  these
          constructions might need to be escaped (with a `\') or quoted to
          protect them from expansion by the shell.

関連情報