Usage of enclosing braces {} as arguments to commands and their options












2















Examples



I've recently found examples of using pairs of enclosing braces {}, with nothing in between the opening and closing braces, as arguments to commands and even to their options:



cat foo | xargs -I{} echo {}



find . -size 0 -exec rm -i {} ;



No Documentation



My problem is that I cannot find a documentation in the GNU Bash Manual that describes the usage of {} in such context as in the examples above.



I do not think it is a parameter expansion, because a dollar sign must precede the enclosing braces in a parameter expansion as in ${}.



It cannot be a brace expansion either, because it takes the form of {x..y[..incr]}, where x and y are not optional.



It also cannot be a command grouping either, because {} is used as arguments.



Questions




  1. What does a pair of enclosing braces {} even mean, in general, as an argument to any command that accepts it?


  2. Where can I find a documentation that describes the usage of {} as arguments?











share|improve this question







New contributor




Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • Some commands have this options {} - meaning targets to act on, with find command, it's remove/rm found files.

    – Tuyen Pham
    1 hour ago
















2















Examples



I've recently found examples of using pairs of enclosing braces {}, with nothing in between the opening and closing braces, as arguments to commands and even to their options:



cat foo | xargs -I{} echo {}



find . -size 0 -exec rm -i {} ;



No Documentation



My problem is that I cannot find a documentation in the GNU Bash Manual that describes the usage of {} in such context as in the examples above.



I do not think it is a parameter expansion, because a dollar sign must precede the enclosing braces in a parameter expansion as in ${}.



It cannot be a brace expansion either, because it takes the form of {x..y[..incr]}, where x and y are not optional.



It also cannot be a command grouping either, because {} is used as arguments.



Questions




  1. What does a pair of enclosing braces {} even mean, in general, as an argument to any command that accepts it?


  2. Where can I find a documentation that describes the usage of {} as arguments?











share|improve this question







New contributor




Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • Some commands have this options {} - meaning targets to act on, with find command, it's remove/rm found files.

    – Tuyen Pham
    1 hour ago














2












2








2








Examples



I've recently found examples of using pairs of enclosing braces {}, with nothing in between the opening and closing braces, as arguments to commands and even to their options:



cat foo | xargs -I{} echo {}



find . -size 0 -exec rm -i {} ;



No Documentation



My problem is that I cannot find a documentation in the GNU Bash Manual that describes the usage of {} in such context as in the examples above.



I do not think it is a parameter expansion, because a dollar sign must precede the enclosing braces in a parameter expansion as in ${}.



It cannot be a brace expansion either, because it takes the form of {x..y[..incr]}, where x and y are not optional.



It also cannot be a command grouping either, because {} is used as arguments.



Questions




  1. What does a pair of enclosing braces {} even mean, in general, as an argument to any command that accepts it?


  2. Where can I find a documentation that describes the usage of {} as arguments?











share|improve this question







New contributor




Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












Examples



I've recently found examples of using pairs of enclosing braces {}, with nothing in between the opening and closing braces, as arguments to commands and even to their options:



cat foo | xargs -I{} echo {}



find . -size 0 -exec rm -i {} ;



No Documentation



My problem is that I cannot find a documentation in the GNU Bash Manual that describes the usage of {} in such context as in the examples above.



I do not think it is a parameter expansion, because a dollar sign must precede the enclosing braces in a parameter expansion as in ${}.



It cannot be a brace expansion either, because it takes the form of {x..y[..incr]}, where x and y are not optional.



It also cannot be a command grouping either, because {} is used as arguments.



Questions




  1. What does a pair of enclosing braces {} even mean, in general, as an argument to any command that accepts it?


  2. Where can I find a documentation that describes the usage of {} as arguments?








bash shell






share|improve this question







New contributor




Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 1 hour ago









Niko GambtNiko Gambt

111




111




New contributor




Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Niko Gambt is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.













  • Some commands have this options {} - meaning targets to act on, with find command, it's remove/rm found files.

    – Tuyen Pham
    1 hour ago



















  • Some commands have this options {} - meaning targets to act on, with find command, it's remove/rm found files.

    – Tuyen Pham
    1 hour ago

















Some commands have this options {} - meaning targets to act on, with find command, it's remove/rm found files.

– Tuyen Pham
1 hour ago





Some commands have this options {} - meaning targets to act on, with find command, it's remove/rm found files.

– Tuyen Pham
1 hour ago










1 Answer
1






active

oldest

votes


















2














These curly braces are left alone by bash; they belong to find and xargs, respectively, and are described in their man-pages.



man find




   -exec command ;
Execute command; true if 0 status is returned. All following arguments to find are
taken to be arguments to the command until an argument consisting of `;' is encoun‐
tered. The string `{}' is replaced by the current file name being processed every‐
where it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions of find. Both of these constructions might need to be
escaped (with a `') or quoted to protect them from expansion by the shell. See
the EXAMPLES section for examples of the use of the -exec option. The specified
command is run once for each matched file. The command is executed in the starting
directory. There are unavoidable security problems surrounding use of the -exec
action; you should use the -execdir option instead.

-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 invocations 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. The
command is executed in the starting directory. If find encounters an error, this
can sometimes cause an immediate exit, so some pending commands may not be run at
all. This variant of -exec always returns true.

-execdir command ;

-execdir command {} +
Like -exec, but the specified command is run from the subdirectory containing the
matched file, which is not normally the directory in which you started find. This
a much more secure method for invoking commands, as it avoids race conditions dur‐
ing resolution of the paths to the matched files. As with the -exec action, the
`+' form of -execdir will build a command line to process more than one matched
file, but any given invocation of command will only list files that exist in the
same subdirectory. If you use this option, you must ensure that your $PATH envi‐
ronment variable does not reference `.'; otherwise, an attacker can run any com‐
mands they like by leaving an appropriately-named file in a directory in which you
will run -execdir. The same applies to having entries in $PATH which are empty or
which are not absolute directory names. If find encounters an error, this can
sometimes cause an immediate exit, so some pending commands may not be run at all.
The result of the action depends on whether the + or the ; variant is being used;
-execdir command {} + always returns true, while -execdir command {} ; returns true
only if command returns 0.



man xargs




   -I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from
standard input. Also, unquoted blanks do not terminate input items; instead the
separator is the newline character. Implies -x and -L 1.

-i[replace-str], --replace[=replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified. If the re‐
place-str argument is missing, the effect is the same as -I{}. This option is dep‐
recated; use -I instead.






share|improve this answer





















  • 1





    Thank you! I'm annoyed that whoever wrote man xargs did not even bother to explain what {} actually means, nor did the author redirect (no pun intended) the reader to the explanation of -exec in the man-page of find.

    – Niko Gambt
    39 mins ago













  • @NikoGambt - I sympathise ...

    – tink
    33 mins ago











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






Niko Gambt is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f494526%2fusage-of-enclosing-braces-as-arguments-to-commands-and-their-options%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









2














These curly braces are left alone by bash; they belong to find and xargs, respectively, and are described in their man-pages.



man find




   -exec command ;
Execute command; true if 0 status is returned. All following arguments to find are
taken to be arguments to the command until an argument consisting of `;' is encoun‐
tered. The string `{}' is replaced by the current file name being processed every‐
where it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions of find. Both of these constructions might need to be
escaped (with a `') or quoted to protect them from expansion by the shell. See
the EXAMPLES section for examples of the use of the -exec option. The specified
command is run once for each matched file. The command is executed in the starting
directory. There are unavoidable security problems surrounding use of the -exec
action; you should use the -execdir option instead.

-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 invocations 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. The
command is executed in the starting directory. If find encounters an error, this
can sometimes cause an immediate exit, so some pending commands may not be run at
all. This variant of -exec always returns true.

-execdir command ;

-execdir command {} +
Like -exec, but the specified command is run from the subdirectory containing the
matched file, which is not normally the directory in which you started find. This
a much more secure method for invoking commands, as it avoids race conditions dur‐
ing resolution of the paths to the matched files. As with the -exec action, the
`+' form of -execdir will build a command line to process more than one matched
file, but any given invocation of command will only list files that exist in the
same subdirectory. If you use this option, you must ensure that your $PATH envi‐
ronment variable does not reference `.'; otherwise, an attacker can run any com‐
mands they like by leaving an appropriately-named file in a directory in which you
will run -execdir. The same applies to having entries in $PATH which are empty or
which are not absolute directory names. If find encounters an error, this can
sometimes cause an immediate exit, so some pending commands may not be run at all.
The result of the action depends on whether the + or the ; variant is being used;
-execdir command {} + always returns true, while -execdir command {} ; returns true
only if command returns 0.



man xargs




   -I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from
standard input. Also, unquoted blanks do not terminate input items; instead the
separator is the newline character. Implies -x and -L 1.

-i[replace-str], --replace[=replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified. If the re‐
place-str argument is missing, the effect is the same as -I{}. This option is dep‐
recated; use -I instead.






share|improve this answer





















  • 1





    Thank you! I'm annoyed that whoever wrote man xargs did not even bother to explain what {} actually means, nor did the author redirect (no pun intended) the reader to the explanation of -exec in the man-page of find.

    – Niko Gambt
    39 mins ago













  • @NikoGambt - I sympathise ...

    – tink
    33 mins ago
















2














These curly braces are left alone by bash; they belong to find and xargs, respectively, and are described in their man-pages.



man find




   -exec command ;
Execute command; true if 0 status is returned. All following arguments to find are
taken to be arguments to the command until an argument consisting of `;' is encoun‐
tered. The string `{}' is replaced by the current file name being processed every‐
where it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions of find. Both of these constructions might need to be
escaped (with a `') or quoted to protect them from expansion by the shell. See
the EXAMPLES section for examples of the use of the -exec option. The specified
command is run once for each matched file. The command is executed in the starting
directory. There are unavoidable security problems surrounding use of the -exec
action; you should use the -execdir option instead.

-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 invocations 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. The
command is executed in the starting directory. If find encounters an error, this
can sometimes cause an immediate exit, so some pending commands may not be run at
all. This variant of -exec always returns true.

-execdir command ;

-execdir command {} +
Like -exec, but the specified command is run from the subdirectory containing the
matched file, which is not normally the directory in which you started find. This
a much more secure method for invoking commands, as it avoids race conditions dur‐
ing resolution of the paths to the matched files. As with the -exec action, the
`+' form of -execdir will build a command line to process more than one matched
file, but any given invocation of command will only list files that exist in the
same subdirectory. If you use this option, you must ensure that your $PATH envi‐
ronment variable does not reference `.'; otherwise, an attacker can run any com‐
mands they like by leaving an appropriately-named file in a directory in which you
will run -execdir. The same applies to having entries in $PATH which are empty or
which are not absolute directory names. If find encounters an error, this can
sometimes cause an immediate exit, so some pending commands may not be run at all.
The result of the action depends on whether the + or the ; variant is being used;
-execdir command {} + always returns true, while -execdir command {} ; returns true
only if command returns 0.



man xargs




   -I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from
standard input. Also, unquoted blanks do not terminate input items; instead the
separator is the newline character. Implies -x and -L 1.

-i[replace-str], --replace[=replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified. If the re‐
place-str argument is missing, the effect is the same as -I{}. This option is dep‐
recated; use -I instead.






share|improve this answer





















  • 1





    Thank you! I'm annoyed that whoever wrote man xargs did not even bother to explain what {} actually means, nor did the author redirect (no pun intended) the reader to the explanation of -exec in the man-page of find.

    – Niko Gambt
    39 mins ago













  • @NikoGambt - I sympathise ...

    – tink
    33 mins ago














2












2








2







These curly braces are left alone by bash; they belong to find and xargs, respectively, and are described in their man-pages.



man find




   -exec command ;
Execute command; true if 0 status is returned. All following arguments to find are
taken to be arguments to the command until an argument consisting of `;' is encoun‐
tered. The string `{}' is replaced by the current file name being processed every‐
where it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions of find. Both of these constructions might need to be
escaped (with a `') or quoted to protect them from expansion by the shell. See
the EXAMPLES section for examples of the use of the -exec option. The specified
command is run once for each matched file. The command is executed in the starting
directory. There are unavoidable security problems surrounding use of the -exec
action; you should use the -execdir option instead.

-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 invocations 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. The
command is executed in the starting directory. If find encounters an error, this
can sometimes cause an immediate exit, so some pending commands may not be run at
all. This variant of -exec always returns true.

-execdir command ;

-execdir command {} +
Like -exec, but the specified command is run from the subdirectory containing the
matched file, which is not normally the directory in which you started find. This
a much more secure method for invoking commands, as it avoids race conditions dur‐
ing resolution of the paths to the matched files. As with the -exec action, the
`+' form of -execdir will build a command line to process more than one matched
file, but any given invocation of command will only list files that exist in the
same subdirectory. If you use this option, you must ensure that your $PATH envi‐
ronment variable does not reference `.'; otherwise, an attacker can run any com‐
mands they like by leaving an appropriately-named file in a directory in which you
will run -execdir. The same applies to having entries in $PATH which are empty or
which are not absolute directory names. If find encounters an error, this can
sometimes cause an immediate exit, so some pending commands may not be run at all.
The result of the action depends on whether the + or the ; variant is being used;
-execdir command {} + always returns true, while -execdir command {} ; returns true
only if command returns 0.



man xargs




   -I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from
standard input. Also, unquoted blanks do not terminate input items; instead the
separator is the newline character. Implies -x and -L 1.

-i[replace-str], --replace[=replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified. If the re‐
place-str argument is missing, the effect is the same as -I{}. This option is dep‐
recated; use -I instead.






share|improve this answer















These curly braces are left alone by bash; they belong to find and xargs, respectively, and are described in their man-pages.



man find




   -exec command ;
Execute command; true if 0 status is returned. All following arguments to find are
taken to be arguments to the command until an argument consisting of `;' is encoun‐
tered. The string `{}' is replaced by the current file name being processed every‐
where it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions of find. Both of these constructions might need to be
escaped (with a `') or quoted to protect them from expansion by the shell. See
the EXAMPLES section for examples of the use of the -exec option. The specified
command is run once for each matched file. The command is executed in the starting
directory. There are unavoidable security problems surrounding use of the -exec
action; you should use the -execdir option instead.

-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 invocations 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. The
command is executed in the starting directory. If find encounters an error, this
can sometimes cause an immediate exit, so some pending commands may not be run at
all. This variant of -exec always returns true.

-execdir command ;

-execdir command {} +
Like -exec, but the specified command is run from the subdirectory containing the
matched file, which is not normally the directory in which you started find. This
a much more secure method for invoking commands, as it avoids race conditions dur‐
ing resolution of the paths to the matched files. As with the -exec action, the
`+' form of -execdir will build a command line to process more than one matched
file, but any given invocation of command will only list files that exist in the
same subdirectory. If you use this option, you must ensure that your $PATH envi‐
ronment variable does not reference `.'; otherwise, an attacker can run any com‐
mands they like by leaving an appropriately-named file in a directory in which you
will run -execdir. The same applies to having entries in $PATH which are empty or
which are not absolute directory names. If find encounters an error, this can
sometimes cause an immediate exit, so some pending commands may not be run at all.
The result of the action depends on whether the + or the ; variant is being used;
-execdir command {} + always returns true, while -execdir command {} ; returns true
only if command returns 0.



man xargs




   -I replace-str
Replace occurrences of replace-str in the initial-arguments with names read from
standard input. Also, unquoted blanks do not terminate input items; instead the
separator is the newline character. Implies -x and -L 1.

-i[replace-str], --replace[=replace-str]
This option is a synonym for -Ireplace-str if replace-str is specified. If the re‐
place-str argument is missing, the effect is the same as -I{}. This option is dep‐
recated; use -I instead.







share|improve this answer














share|improve this answer



share|improve this answer








edited 56 mins ago

























answered 1 hour ago









tinktink

4,21211219




4,21211219








  • 1





    Thank you! I'm annoyed that whoever wrote man xargs did not even bother to explain what {} actually means, nor did the author redirect (no pun intended) the reader to the explanation of -exec in the man-page of find.

    – Niko Gambt
    39 mins ago













  • @NikoGambt - I sympathise ...

    – tink
    33 mins ago














  • 1





    Thank you! I'm annoyed that whoever wrote man xargs did not even bother to explain what {} actually means, nor did the author redirect (no pun intended) the reader to the explanation of -exec in the man-page of find.

    – Niko Gambt
    39 mins ago













  • @NikoGambt - I sympathise ...

    – tink
    33 mins ago








1




1





Thank you! I'm annoyed that whoever wrote man xargs did not even bother to explain what {} actually means, nor did the author redirect (no pun intended) the reader to the explanation of -exec in the man-page of find.

– Niko Gambt
39 mins ago







Thank you! I'm annoyed that whoever wrote man xargs did not even bother to explain what {} actually means, nor did the author redirect (no pun intended) the reader to the explanation of -exec in the man-page of find.

– Niko Gambt
39 mins ago















@NikoGambt - I sympathise ...

– tink
33 mins ago





@NikoGambt - I sympathise ...

– tink
33 mins ago










Niko Gambt is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















Niko Gambt is a new contributor. Be nice, and check out our Code of Conduct.













Niko Gambt is a new contributor. Be nice, and check out our Code of Conduct.












Niko Gambt is a new contributor. Be nice, and check out our Code of Conduct.
















Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f494526%2fusage-of-enclosing-braces-as-arguments-to-commands-and-their-options%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Eastern Orthodox Church

Zagreb

Understanding the information contained in the Deep Space Network XML data?