通常,$0
在脚本中将其设置为脚本的名称,或设置为脚本的名称(包括路径)。但是,如果我使用bash
该-c
选项,$0
则设置为命令字符串后传递的第一个参数:
bash -c 'echo $0 ' foo bar
# foo
实际上,位置参数似乎已移动,但包含$0
。但是shift
在命令字符串中不受影响$0
(正常情况下):
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
为什么对于命令字符串来说这看起来很奇怪?请注意,我在寻找实现这种奇怪行为的原因和理由。
可以推测这样的命令字符串将不需要$0
通常定义的参数,因此出于经济考虑,它也用于常规参数。但是,在那种情况下,的行为shift
是奇怪的。另一种可能性是$0
用于定义程序的行为(bash
称为sh
或vim
称为la vi
),但不能如此,因为$0
这里仅在命令字符串中可见,而在命令字符串中不可见。我无法想到的其他用途$0
,因此我无所适从。
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *
不幸的$0
是,您也-s
可以使用tream选项将其设置为不可设置的参数xargs
。还有其他。
--
,这可能具有通常的解释“从这里开始论点”,在其他程序中也可以看到。再说一遍,这可能会使那些不熟悉的人误-c
以为--
实际上确实有这种解释。
-
for$0
参数用作习语,例如中的sh -c 'foo $1 $2' - a b
。这样看起来就很正常了(一旦您知道那-
是什么意思)