Примеры
Недавно я нашел примеры использования пар заключающих в скобки паролей {}
, между которыми нет открывающей и закрывающей скобок, в качестве аргументов команд и даже их параметров:
cat foo | xargs -I{} echo {}
find . -size 0 -exec rm -i {} \;
Нет документации
Моя проблема в том, что я не могу найти документацию в Руководстве по GNU Bash, которая описывает использование {}
в таком контексте, как в примерах выше.
Я не думаю, что это расширение параметра , потому что знак доллара должен предшествовать фигурным скобкам в расширении параметра, как в ${}
.
Это также не может быть расширением скобки , потому что оно принимает форму {x..y[..incr]}
, где x
и y
не является обязательным.
Это также не может быть группировка команд , потому что {}
используется в качестве аргументов.
Вопросов
Что вообще означает пара заключающих в скобки пар
{}
в качестве аргумента для любой команды, которая ее принимает?Где я могу найти документацию, которая описывает использование в
{}
качестве аргументов?
{}
- то естьtargets
действовать, с помощьюfind
команды это удалить /rm
найти файлы.Ответы:
Эти фигурные скобки оставлены в покое bash; они принадлежат
find
иxargs
, соответственно, и описаны на их страницах руководства.man find
man xargs
Редактировать: и здесь ПОЧЕМУ bash игнорирует эти фигурные скобки:
man bash
Для акцента: список должен заканчиваться символом новой строки или точкой с запятой .
источник
man xargs
даже не удосужился объяснить, что на{}
самом деле означает, и при этом автор не перенаправил (без каламбура) читателя к объяснению-exec
на странице руководстваfind
.xargs -Iab echo ab
; это чисто произвольный выбор.-I
, я теперь понимаю, что на самом деле делает эта опция. Да,{}
произвольно, как вы сказали. Я был просто смущен объяснениемIf the replace-str argument is missing, the effect is the same as -I{}
. Если бы-I
без аргумента было так же, как-I{}
, тоcat foo | xargs -I echo {}
вы получите тот же результат, что и при запускеcat foo | xargs -I{} echo {}
. Однако они не одинаковы. Первый - ошибка, и что еще больше смутило меня - это сообщение об ошибкеxargs: {}: No such file or directory
, но это только из-за реализации.-I
(верхний регистр I) не может быть запущен без аргумента. Аргумент-I
былecho
. Это основное различие между-I
и-i
(и причина -i устарела, так как опции с необязательными аргументами редки и сбивают с толку)