Что означает + в команде bash `-exec {} +`?
Для структуры команд -exec command {} \;я получил информацию в man find,
- {} средства
selected files, - ; означает опровергнуть аргумент.
- \; сбежал, чтобы защитить их от расширения оболочкой.
В пункте, связанном с -exec command {} +,
-exec command {} +
This variant of the -exec action runs the specified command on
the selected files, but the command line is built by appending
each selected file name at the end; the total number of invoca‐
tions of the command will be much less than the number of
matched files. The command line is built in much the same way
that xargs builds its command lines. Only one instance of `{}'
is allowed within the command, and (when find is being invoked
from a shell) it should be quoted (for example, '{}') to protect
it from interpretation by shells. The command is executed in
the starting directory. If any invocation returns a non-zero
value as exit status, then find returns a non-zero exit status.
If find encounters an error, this can sometimes cause an immedi‐
ate exit, so some pending commands may not be run at all. This
variant of -exec always returns true.
Это никогда не говорит что-то о +, Что означает + в bash -exec command {} +?
Это означает прекратить аргумент, такой как ;?+ значит плюс такой как 3+5=8 или же concatenate, чтобы объединить две строки в одну, такую как s1+s2,
Странная вещь, чтобы назначить смысл terminate the argument за +,
1 ответ
Это не имеет ничего общего с Bash, это часть find синтаксис. Команда должна знать, где -exec действие заканчивается. Заканчивается в ; или в +, В зависимости от завершающего символа, правильный вариант -exec действие используется.
Почему эти два персонажа были выбраны для этой цели? Я не знаю. Какой-то способ закончить -exec заявление было обязательным, и кто-то выбрал ; а также +, Теперь символы являются частью стандарта POSIX, когда дело доходит до find команда.
Мы можем только догадываться, что ; был выбран, потому что он также может завершить команду в оболочке, поэтому цель аналогична. По этой причине, однако, ; это должно быть видно find должен быть обработан специально в оболочке, следовательно \; (';' или же ";" тоже работает). Там нет такой проблемы с +,
Технически можно было бы выбрать почти любую другую строку вместо + (то же самое с ;). Обратите внимание, что -exec, {}, + а также ; (после прохождения оболочки благодаря экранированию или цитированию), возможные тесты или такие действия, как -type или же -print - все они аргументы find; они становятся значимыми, когда find обрабатывает их, их значение происходит от того, как find было изобретено.
Подвести итоги:
- Это о
find, не оbash, - Инструмент поддерживает два немного разных
-execдействия. - Чтобы отличить их друг от друга, мы используем два разных аргумента, которые заканчиваются
-execзаявление; это выбор дизайна. - Эти два разных аргумента
;а также+; это выбор дизайна. - Эти выборы могли быть сделаны по-другому. Даже если за этим стоит история
+(что я не знаю), это пустяки, а не что-то действительно значимое. Я могу только догадываться{} +для "один аргумент или более", например, 10+ иногда означает "десять или более".
Более широкое понимание
+значит плюс такой как3+5=8или жеconcatenate, чтобы объединить две строки в одну, такую какs1+s2, Странно, что назначение значения завершает аргумент+,
Как насчет
>означает "больше, чем"... Странно назначать значение "перенаправление" для>,
"+ означает плюс "не от Бога. Кто-то решил, другие последовали, и символ застрял.
- Кто-то решил
+означает "плюс" в математике. - Кто-то решил
>означает "больше, чем" в математике. - Кто-то решил
>перенаправляет в оболочку. - Кто-то решил
+завершаясь-execвfindконтекст.