find -exec bash -c {} +:2つのファイルが1つしか見つからないのはなぜですか?

find -exec bash -c {} +:2つのファイルが1つしか見つからないのはなぜですか?
touch 1.txt 2.txt
find . -name "[12].txt" -exec sh -c 'echo "${1}"' sh {} + -exec echo {} +
./2.txt
./2.txt ./1.txt

echo内部的にsh -c1つのファイルしか出力されないのはなぜですか?今日は、findそれがどのように機能するのか理解していると思います。「find」の-execオプションについてところで今また混乱しています。同じ結果を得ました-exec bash。ティア

答え1

そして:

-exec sh -c 'echo "${1}"' sh {} +

findsh最初に要求したshファイル(${1}または$1単に)にできるだけ多くのファイルを渡しますecho。それらすべてを渡すには、代わりに次を使用します"$@"

-exec sh -c 'echo "$@"' sh {} +

またはsh、各引数に対して一度呼び出すには、位置引数を持つループを使用します(位置引数は、デフォルトでループが繰り返す項目です)。echofor

-exec sh -c 'for file do
               echo "$file"
             done' sh {} +

関連情報