Re: find-Kommando
Am 24. Februar 2010 19:12 schrieb Tobias Nissen <tn@movb.de>:
> Mario 'BitKoenig' Holbe wrote:
>> Rudolf Henze <rudo.henze@googlemail.com> wrote:
>>> find . -type f -exec file '{}' \;
>>> Dass man das Semikolon escapen muss, damit es nicht als
>>> Befehlstrenner erkannt wird verstehe ich ja. Aber wozu denn {} in
>>> einfachen Anf=FChrungszeichen setzen?
>>
>> Aus demselben Grund. Ist halt nur ne andere Art des Escapens.
>>
>> find . -type f -exec file \{\} \;
>> oder
>> find . -type f -exec file '{}' ';'
>> waeren aequivalent.
>>
>> Genauso wie ; ein von der Shell interpretiertes Sonderzeichen ist,
>> sind es auch { und } - die oeffnen bzw. schliessen einen
>> Funktionsblock. $ foo() { echo bar; }
>> $ foo
>> bar
>> $
>
> Es muss ja nicht gleich ein Funktionsblock sein, kann ja auch einfach
> die Grouping-Syntax sein.
>
> Aber ich finde einfach kein Beispiel für ein ungequotetes {}, welches
> ein ungewünschtes Verhalten produziert.
>
> Eine Funktionsdeklaration der Form
>
> a() {}
>
> geht nicht. Auch eine Gruppierung der Form
>
> {}
>
> ist in sh, dash oder bash nicht drin.
>
> Mit ner alten bash unter Solaris geht sowas wie
>
> find . -exec echo {}_foo \;
>
> nicht. Aber da tut's auch ein gequotetes {} nicht.
Ok, dann gehe ich einfach mal davon aus, dass der Manpage
Autor ein Erbsenzähler war.
>
> Nun sind { und } laut POSIX "shell punctuation characters" und dass die
> gesondert behandelt werden müssen, ist verständlich. Aber ich würde
> gerne mal ein Beispiel für einen Fall sehen, in dem es mit einem
> ungequoteten {} zu einem unerwartetem Verhalten kommt.
>
Aber mich hätte auch interessiert, was man im Allgemeinen unter
"punctuation characters" versteht. Mit [:punct:] hat das nix zu tun, oder doch?
Rudolf
--
http://rettedeinefreiheit.de/
Gegen Freiheitsberaubung in Deutschland
Reply to: