在刷上bash(已经有一段时间了)时,我惊讶地发现执行此代码,保存为script.sh:
echo "Arg 0 to script.sh: $0"
echo "Arg 1 to script.sh: $1"
function echo_args
{
echo "Arg 0 to echo_args: $0"
echo "Arg 1 to echo_args: $1"
}
echo_args
像这样:
>> ./script.sh argument
输出:
Arg 0 to script.sh: ./script.sh
Arg 1 to script.sh: argument
Arg 0 to echo_args: ./script.sh
Arg 1 to echo_args:
我很惊讶地看到$ 0的script.sh作为$ 0传递给echo_args,而$ 1的处理方式并不相同。在我看来它应该是两者兼而有之。
任何澄清都表示赞赏。
答案 0 :(得分:3)
$ 0是bash中的“特殊参数”,它始终计算为脚本的名称,并在脚本的开头设置。看起来这也意味着它有点全局化,因为它无法重新分配。
有关更多信息,这是一个非常好的参考: