通常,$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。这样看起来就很正常了(一旦您知道那-是什么意思)