Usage of enclosing braces {} as arguments to commands and their options
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
What does a pair of enclosing braces
{}
even mean, in general, as an argument to any command that accepts it?Where can I find a documentation that describes the usage of
{}
as arguments?
bash shell
add a comment |
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
What does a pair of enclosing braces
{}
even mean, in general, as an argument to any command that accepts it?Where can I find a documentation that describes the usage of
{}
as arguments?
bash shell
Some commands have this options{}
- meaningtargets
to act on, withfind
command, it's remove/rm
found files.
– Tuyen Pham
Jan 15 at 3:48
add a comment |
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
What does a pair of enclosing braces
{}
even mean, in general, as an argument to any command that accepts it?Where can I find a documentation that describes the usage of
{}
as arguments?
bash shell
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
What does a pair of enclosing braces
{}
even mean, in general, as an argument to any command that accepts it?Where can I find a documentation that describes the usage of
{}
as arguments?
bash shell
bash shell
asked Jan 15 at 3:43
Niko GambtNiko Gambt
1836
1836
Some commands have this options{}
- meaningtargets
to act on, withfind
command, it's remove/rm
found files.
– Tuyen Pham
Jan 15 at 3:48
add a comment |
Some commands have this options{}
- meaningtargets
to act on, withfind
command, it's remove/rm
found files.
– Tuyen Pham
Jan 15 at 3:48
Some commands have this options
{}
- meaning targets
to act on, with find
command, it's remove/rm
found files.– Tuyen Pham
Jan 15 at 3:48
Some commands have this options
{}
- meaning targets
to act on, with find
command, it's remove/rm
found files.– Tuyen Pham
Jan 15 at 3:48
add a comment |
1 Answer
1
active
oldest
votes
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 encountered. The string{}
is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions offind
. 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 thatxargs
builds
its command lines. Only one instance of{}
is allowed within the command. The
command is executed in the starting directory. Iffind
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 during 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
environment variable does not reference.
; otherwise, an attacker can run any commands 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. Iffind
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
-I
replace-str if replace-str is specified. If the replace-str argument is missing, the effect is the same as-I{}
. This option is deprecated; use-I
instead.
Edit: and here WHY bash ignores those curly braces:
man bash
{
list;
}
list is simply executed in the current shell environment. list must be terminated with a newline or semicolon. This is known as a group command. The return status is the exit status of
list. Note that unlike the metacharacters ( and ), { and } are reserved words and must occur
where a reserved word is permitted to be recognized. Since they do not cause a word break,
they must be separated from list by whitespace or another shell metacharacter.
For emphasis: list must be terminated with a newline or semicolon.
1
Thank you! I'm annoyed that whoever wroteman 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 offind
.
– Niko Gambt
Jan 15 at 4:20
@NikoGambt - I sympathise ...
– tink
Jan 15 at 4:26
5
@NikoGambt Well, {} doesn't really mean anything to xargs, except for being the default value for -i, which is deprecated. I'm not sure what explanation is necessary beyond that. In the example you posted, it might as well have beenxargs -Iab echo ab
; it's a purely arbitrary choice.
– Random832
Jan 15 at 6:05
@Random832 After doing some more testing with-I
, I now understand what that option actually does. Yes,{}
is arbitrary, as you said. I was just confused by the explanationIf the replace-str argument is missing, the effect is the same as -I{}
. If-I
without argument were the same as-I{}
, thencat foo | xargs -I echo {}
would produce the same result as runningcat foo | xargs -I{} echo {}
. However, they are not the same. The former is an error, and what confused me even more was the error messagexargs: {}: No such file or directory
, but that's just due to implementation.
– Niko Gambt
Jan 15 at 7:56
1
@NikoGambt-I
(uppercase I) cannot be run without an argument. The argument to-I
wasecho
. This is the primary difference between-I
and-i
(and the reason -i is deprecated, since options with non-required arguments are uncommon and confusing)
– Random832
Jan 15 at 14:46
|
show 2 more comments
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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 encountered. The string{}
is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions offind
. 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 thatxargs
builds
its command lines. Only one instance of{}
is allowed within the command. The
command is executed in the starting directory. Iffind
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 during 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
environment variable does not reference.
; otherwise, an attacker can run any commands 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. Iffind
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
-I
replace-str if replace-str is specified. If the replace-str argument is missing, the effect is the same as-I{}
. This option is deprecated; use-I
instead.
Edit: and here WHY bash ignores those curly braces:
man bash
{
list;
}
list is simply executed in the current shell environment. list must be terminated with a newline or semicolon. This is known as a group command. The return status is the exit status of
list. Note that unlike the metacharacters ( and ), { and } are reserved words and must occur
where a reserved word is permitted to be recognized. Since they do not cause a word break,
they must be separated from list by whitespace or another shell metacharacter.
For emphasis: list must be terminated with a newline or semicolon.
1
Thank you! I'm annoyed that whoever wroteman 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 offind
.
– Niko Gambt
Jan 15 at 4:20
@NikoGambt - I sympathise ...
– tink
Jan 15 at 4:26
5
@NikoGambt Well, {} doesn't really mean anything to xargs, except for being the default value for -i, which is deprecated. I'm not sure what explanation is necessary beyond that. In the example you posted, it might as well have beenxargs -Iab echo ab
; it's a purely arbitrary choice.
– Random832
Jan 15 at 6:05
@Random832 After doing some more testing with-I
, I now understand what that option actually does. Yes,{}
is arbitrary, as you said. I was just confused by the explanationIf the replace-str argument is missing, the effect is the same as -I{}
. If-I
without argument were the same as-I{}
, thencat foo | xargs -I echo {}
would produce the same result as runningcat foo | xargs -I{} echo {}
. However, they are not the same. The former is an error, and what confused me even more was the error messagexargs: {}: No such file or directory
, but that's just due to implementation.
– Niko Gambt
Jan 15 at 7:56
1
@NikoGambt-I
(uppercase I) cannot be run without an argument. The argument to-I
wasecho
. This is the primary difference between-I
and-i
(and the reason -i is deprecated, since options with non-required arguments are uncommon and confusing)
– Random832
Jan 15 at 14:46
|
show 2 more comments
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 encountered. The string{}
is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions offind
. 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 thatxargs
builds
its command lines. Only one instance of{}
is allowed within the command. The
command is executed in the starting directory. Iffind
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 during 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
environment variable does not reference.
; otherwise, an attacker can run any commands 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. Iffind
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
-I
replace-str if replace-str is specified. If the replace-str argument is missing, the effect is the same as-I{}
. This option is deprecated; use-I
instead.
Edit: and here WHY bash ignores those curly braces:
man bash
{
list;
}
list is simply executed in the current shell environment. list must be terminated with a newline or semicolon. This is known as a group command. The return status is the exit status of
list. Note that unlike the metacharacters ( and ), { and } are reserved words and must occur
where a reserved word is permitted to be recognized. Since they do not cause a word break,
they must be separated from list by whitespace or another shell metacharacter.
For emphasis: list must be terminated with a newline or semicolon.
1
Thank you! I'm annoyed that whoever wroteman 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 offind
.
– Niko Gambt
Jan 15 at 4:20
@NikoGambt - I sympathise ...
– tink
Jan 15 at 4:26
5
@NikoGambt Well, {} doesn't really mean anything to xargs, except for being the default value for -i, which is deprecated. I'm not sure what explanation is necessary beyond that. In the example you posted, it might as well have beenxargs -Iab echo ab
; it's a purely arbitrary choice.
– Random832
Jan 15 at 6:05
@Random832 After doing some more testing with-I
, I now understand what that option actually does. Yes,{}
is arbitrary, as you said. I was just confused by the explanationIf the replace-str argument is missing, the effect is the same as -I{}
. If-I
without argument were the same as-I{}
, thencat foo | xargs -I echo {}
would produce the same result as runningcat foo | xargs -I{} echo {}
. However, they are not the same. The former is an error, and what confused me even more was the error messagexargs: {}: No such file or directory
, but that's just due to implementation.
– Niko Gambt
Jan 15 at 7:56
1
@NikoGambt-I
(uppercase I) cannot be run without an argument. The argument to-I
wasecho
. This is the primary difference between-I
and-i
(and the reason -i is deprecated, since options with non-required arguments are uncommon and confusing)
– Random832
Jan 15 at 14:46
|
show 2 more comments
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 encountered. The string{}
is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions offind
. 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 thatxargs
builds
its command lines. Only one instance of{}
is allowed within the command. The
command is executed in the starting directory. Iffind
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 during 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
environment variable does not reference.
; otherwise, an attacker can run any commands 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. Iffind
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
-I
replace-str if replace-str is specified. If the replace-str argument is missing, the effect is the same as-I{}
. This option is deprecated; use-I
instead.
Edit: and here WHY bash ignores those curly braces:
man bash
{
list;
}
list is simply executed in the current shell environment. list must be terminated with a newline or semicolon. This is known as a group command. The return status is the exit status of
list. Note that unlike the metacharacters ( and ), { and } are reserved words and must occur
where a reserved word is permitted to be recognized. Since they do not cause a word break,
they must be separated from list by whitespace or another shell metacharacter.
For emphasis: list must be terminated with a newline or semicolon.
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 encountered. The string{}
is replaced by the current file name being processed everywhere it occurs in the arguments to the command, not just in arguments where it is
alone, as in some versions offind
. 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 thatxargs
builds
its command lines. Only one instance of{}
is allowed within the command. The
command is executed in the starting directory. Iffind
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 during 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
environment variable does not reference.
; otherwise, an attacker can run any commands 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. Iffind
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
-I
replace-str if replace-str is specified. If the replace-str argument is missing, the effect is the same as-I{}
. This option is deprecated; use-I
instead.
Edit: and here WHY bash ignores those curly braces:
man bash
{
list;
}
list is simply executed in the current shell environment. list must be terminated with a newline or semicolon. This is known as a group command. The return status is the exit status of
list. Note that unlike the metacharacters ( and ), { and } are reserved words and must occur
where a reserved word is permitted to be recognized. Since they do not cause a word break,
they must be separated from list by whitespace or another shell metacharacter.
For emphasis: list must be terminated with a newline or semicolon.
edited Jan 15 at 9:26
Toby Speight
5,32111031
5,32111031
answered Jan 15 at 3:59
tinktink
4,47511221
4,47511221
1
Thank you! I'm annoyed that whoever wroteman 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 offind
.
– Niko Gambt
Jan 15 at 4:20
@NikoGambt - I sympathise ...
– tink
Jan 15 at 4:26
5
@NikoGambt Well, {} doesn't really mean anything to xargs, except for being the default value for -i, which is deprecated. I'm not sure what explanation is necessary beyond that. In the example you posted, it might as well have beenxargs -Iab echo ab
; it's a purely arbitrary choice.
– Random832
Jan 15 at 6:05
@Random832 After doing some more testing with-I
, I now understand what that option actually does. Yes,{}
is arbitrary, as you said. I was just confused by the explanationIf the replace-str argument is missing, the effect is the same as -I{}
. If-I
without argument were the same as-I{}
, thencat foo | xargs -I echo {}
would produce the same result as runningcat foo | xargs -I{} echo {}
. However, they are not the same. The former is an error, and what confused me even more was the error messagexargs: {}: No such file or directory
, but that's just due to implementation.
– Niko Gambt
Jan 15 at 7:56
1
@NikoGambt-I
(uppercase I) cannot be run without an argument. The argument to-I
wasecho
. This is the primary difference between-I
and-i
(and the reason -i is deprecated, since options with non-required arguments are uncommon and confusing)
– Random832
Jan 15 at 14:46
|
show 2 more comments
1
Thank you! I'm annoyed that whoever wroteman 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 offind
.
– Niko Gambt
Jan 15 at 4:20
@NikoGambt - I sympathise ...
– tink
Jan 15 at 4:26
5
@NikoGambt Well, {} doesn't really mean anything to xargs, except for being the default value for -i, which is deprecated. I'm not sure what explanation is necessary beyond that. In the example you posted, it might as well have beenxargs -Iab echo ab
; it's a purely arbitrary choice.
– Random832
Jan 15 at 6:05
@Random832 After doing some more testing with-I
, I now understand what that option actually does. Yes,{}
is arbitrary, as you said. I was just confused by the explanationIf the replace-str argument is missing, the effect is the same as -I{}
. If-I
without argument were the same as-I{}
, thencat foo | xargs -I echo {}
would produce the same result as runningcat foo | xargs -I{} echo {}
. However, they are not the same. The former is an error, and what confused me even more was the error messagexargs: {}: No such file or directory
, but that's just due to implementation.
– Niko Gambt
Jan 15 at 7:56
1
@NikoGambt-I
(uppercase I) cannot be run without an argument. The argument to-I
wasecho
. This is the primary difference between-I
and-i
(and the reason -i is deprecated, since options with non-required arguments are uncommon and confusing)
– Random832
Jan 15 at 14:46
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
Jan 15 at 4:20
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
Jan 15 at 4:20
@NikoGambt - I sympathise ...
– tink
Jan 15 at 4:26
@NikoGambt - I sympathise ...
– tink
Jan 15 at 4:26
5
5
@NikoGambt Well, {} doesn't really mean anything to xargs, except for being the default value for -i, which is deprecated. I'm not sure what explanation is necessary beyond that. In the example you posted, it might as well have been
xargs -Iab echo ab
; it's a purely arbitrary choice.– Random832
Jan 15 at 6:05
@NikoGambt Well, {} doesn't really mean anything to xargs, except for being the default value for -i, which is deprecated. I'm not sure what explanation is necessary beyond that. In the example you posted, it might as well have been
xargs -Iab echo ab
; it's a purely arbitrary choice.– Random832
Jan 15 at 6:05
@Random832 After doing some more testing with
-I
, I now understand what that option actually does. Yes, {}
is arbitrary, as you said. I was just confused by the explanation If the replace-str argument is missing, the effect is the same as -I{}
. If -I
without argument were the same as -I{}
, then cat foo | xargs -I echo {}
would produce the same result as running cat foo | xargs -I{} echo {}
. However, they are not the same. The former is an error, and what confused me even more was the error message xargs: {}: No such file or directory
, but that's just due to implementation.– Niko Gambt
Jan 15 at 7:56
@Random832 After doing some more testing with
-I
, I now understand what that option actually does. Yes, {}
is arbitrary, as you said. I was just confused by the explanation If the replace-str argument is missing, the effect is the same as -I{}
. If -I
without argument were the same as -I{}
, then cat foo | xargs -I echo {}
would produce the same result as running cat foo | xargs -I{} echo {}
. However, they are not the same. The former is an error, and what confused me even more was the error message xargs: {}: No such file or directory
, but that's just due to implementation.– Niko Gambt
Jan 15 at 7:56
1
1
@NikoGambt
-I
(uppercase I) cannot be run without an argument. The argument to -I
was echo
. This is the primary difference between -I
and -i
(and the reason -i is deprecated, since options with non-required arguments are uncommon and confusing)– Random832
Jan 15 at 14:46
@NikoGambt
-I
(uppercase I) cannot be run without an argument. The argument to -I
was echo
. This is the primary difference between -I
and -i
(and the reason -i is deprecated, since options with non-required arguments are uncommon and confusing)– Random832
Jan 15 at 14:46
|
show 2 more comments
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
Some commands have this options
{}
- meaningtargets
to act on, withfind
command, it's remove/rm
found files.– Tuyen Pham
Jan 15 at 3:48