"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>_shbash

查看空参数和无参数之间区别的一种简单方法是使用 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