Что означает + в команде bash `-exec {} +`?

Для структуры команд -exec command {} \;я получил информацию в man find,

  1. {} средства selected files,
  2. ; означает опровергнуть аргумент.
  3. \; сбежал, чтобы защитить их от расширения оболочкой.

В пункте, связанном с -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 было изобретено.

Подвести итоги:

  1. Это о find, не о bash,
  2. Инструмент поддерживает два немного разных -exec действия.
  3. Чтобы отличить их друг от друга, мы используем два разных аргумента, которые заканчиваются -exec заявление; это выбор дизайна.
  4. Эти два разных аргумента ; а также +; это выбор дизайна.
  5. Эти выборы могли быть сделаны по-другому. Даже если за этим стоит история + (что я не знаю), это пустяки, а не что-то действительно значимое. Я могу только догадываться {} + для "один аргумент или более", например, 10+ иногда означает "десять или более".

Более широкое понимание

+ значит плюс такой как 3+5=8 или же concatenate, чтобы объединить две строки в одну, такую ​​как s1+s2, Странно, что назначение значения завершает аргумент +,

Как насчет

> означает "больше, чем"... Странно назначать значение "перенаправление" для >,

"+ означает плюс "не от Бога. Кто-то решил, другие последовали, и символ застрял.

  • Кто-то решил + означает "плюс" в математике.
  • Кто-то решил > означает "больше, чем" в математике.
  • Кто-то решил > перенаправляет в оболочку.
  • Кто-то решил + завершаясь -exec в find контекст.
Другие вопросы по тегам