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

402
scrapy

Для структуры команд -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для +.

0
Это было довольно хорошо объяснено в SO Prime здесь, https://stackoverflow.com/questions/6085156/using-semicolon-vs-plus-with-exec-in-find А в Unix SE здесь, https: // unix. stackexchange.com/questions/195939/what-is-meaning-of-in-finds-exec-command Uberfuzzy 5 лет назад 0

1 ответ на вопрос

1
Kamil Maciorowski

Это не имеет ничего общего с 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контексте.

Похожие вопросы