Что означает + в команде 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
контекст.