"bash -c command argument" 末尾的参数的目的是什么?
What's the purpose of the argument at the end of "bash -c command argument"?
来自 man bash
:
If the -c option is present, then commands are read from
the first non-option argument command_string. If there
are arguments after the command_string, the first argument
is assigned to [=11=] and any remaining arguments are assigned
to the positional parameters. The assignment to [=11=] sets the
name of the shell, which is used in warning and error messages.
我不明白 [=15=]
作业的目的。
我正在探索使用 xargs 将参数传递给多个命令的方法。以下解决方案工作得很好(灵感来自 here),但我不明白为什么最后需要一个参数:
[编辑:在之后,参数不需要为空,它确实可以是任何东西,但它必须存在]。
$ cat test
abc
def
ghi
$ cat test | xargs -n 1 /bin/bash -c 'echo "1-$@"; echo "2-$@";' 'dummyArgument'
1-abc
2-abc
1-def
2-def
1-ghi
2-ghi
显然 'dummyArgument'
是 bash -c
能够解释 $@
所必需的(它甚至可以为空 ''
),因为没有它我会得到以下结果结果:
$ cat test | xargs -n 1 /bin/bash -c 'echo "1-$@"; echo "2-$@";'
1-
2-
1-
2-
1-
2-
但是它是如何工作的呢?为什么我需要 'dummyArgument'
?
它不必是空引号(这是您提供空字符串作为具体值的方式)。它可以是 任何 值,如果您实际上并不关心命令中 [=12=]
的值。如果您确实关心,那么您将提供您想要的值而不是空字符串。
但是无论第一个参数是什么,它都会被用来设置[=12=]
。没有选项可以保留 [=12=]
未设置并将参数应用于 </code> 等人。</p>
<p>其他常见的“虚拟”值是 <code>_
、sh
和 bash
。
查看空参数和无参数之间区别的一种简单方法是使用 set
命令,然后查看 $#
的值。首先,没有位置参数:
$ set --
$ echo "$#"
0
现在,一个空参数
$ set -- ''
$ echo "$#"
1
I don't understand the purpose of the [=11=]
assignment.
其目的是让您为内联脚本命名,可能用于装饰诊断消息。没什么意思。
$ cat foo.sh
echo my name is [=10=]
$
$ bash foo.sh a b c
my name is foo.sh
$
$ bash -c 'echo my name is [=10=]' foo a b c
my name is foo
来自 man bash
:
If the -c option is present, then commands are read from
the first non-option argument command_string. If there
are arguments after the command_string, the first argument
is assigned to [=11=] and any remaining arguments are assigned
to the positional parameters. The assignment to [=11=] sets the
name of the shell, which is used in warning and error messages.
我不明白 [=15=]
作业的目的。
我正在探索使用 xargs 将参数传递给多个命令的方法。以下解决方案工作得很好(灵感来自 here),但我不明白为什么最后需要一个参数:
[编辑:在
$ cat test
abc
def
ghi
$ cat test | xargs -n 1 /bin/bash -c 'echo "1-$@"; echo "2-$@";' 'dummyArgument'
1-abc
2-abc
1-def
2-def
1-ghi
2-ghi
显然 'dummyArgument'
是 bash -c
能够解释 $@
所必需的(它甚至可以为空 ''
),因为没有它我会得到以下结果结果:
$ cat test | xargs -n 1 /bin/bash -c 'echo "1-$@"; echo "2-$@";'
1-
2-
1-
2-
1-
2-
但是它是如何工作的呢?为什么我需要 'dummyArgument'
?
它不必是空引号(这是您提供空字符串作为具体值的方式)。它可以是 任何 值,如果您实际上并不关心命令中 [=12=]
的值。如果您确实关心,那么您将提供您想要的值而不是空字符串。
但是无论第一个参数是什么,它都会被用来设置[=12=]
。没有选项可以保留 [=12=]
未设置并将参数应用于 </code> 等人。</p>
<p>其他常见的“虚拟”值是 <code>_
、sh
和 bash
。
查看空参数和无参数之间区别的一种简单方法是使用 set
命令,然后查看 $#
的值。首先,没有位置参数:
$ set --
$ echo "$#"
0
现在,一个空参数
$ set -- ''
$ echo "$#"
1
I don't understand the purpose of the
[=11=]
assignment.
其目的是让您为内联脚本命名,可能用于装饰诊断消息。没什么意思。
$ cat foo.sh
echo my name is [=10=]
$
$ bash foo.sh a b c
my name is foo.sh
$
$ bash -c 'echo my name is [=10=]' foo a b c
my name is foo