0

Linux と find (GNU findutils) 4.4.2 の bash シェルで、次のように記述します。

touch FOO
find . -name FOO -exec echo {} `echo ./FOO {} | tr [A-Z] [a-z]` \;

そして、私は得る

./FOO ./foo ./FOO

出力が ./FOO ./foo ./foo と異なるのはなぜですか?

問題を絞り込む:

find . -name FOO -exec echo `echo {} | tr [A-Z] [a-z]` \;

"./FOO"の代わりに利回り"./foo"

これにはかなり戸惑います。

4

3 に答える 3

4

シェルは、起動する前にバックティックの間にコマンドを実行findします。

したがって、find最初のコマンド ラインで実際に実行されるコマンドは次のとおりです。

find . -name FOO -exec echo {} ./foo {} \;

これにより、表示されている出力が得られるはずです。

./FOO ./foo ./FOO

2 番目のコマンドも最初にバックティックの間にコマンドfindを実行するため、2 番目のコマンド ラインで実際に実行されるコマンドは次のとおりです。

find . -name FOO -exec echo {} \;

echo すべきであり、実行し./FOOます。

于 2013-09-18T14:59:49.613 に答える