归档一个
#!/bin/zsh
echo $*
echo $0
echo ---
echo $argv
echo $argv[0]
当命令是
./a 1 2
表明:
1 2
./a
---
[0]
当命令为:
zsh ./a 1 2
表明:
1 2
./a
---
1 2
为什么“zsh”作为显式命令是否可以改变结果?为什么 argv[0] 没有被赋值?
答案1
$0
不是位置参数,它不是 的一部分$@
,它是脚本/函数的名称。$*
,$@
并且$argv
都是位置参数的相同普通(非稀疏)数组,并且在 zsh 中所有数组索引都从 1 开始,除非启用该ksharrays
选项。
但是,如果您启用ksharrays
数组索引从 0 开始的选项,您会注意到$argv[0]
or${@[0]}
是第一个位置参数:$1
。
您的困惑可能来自类似 ksh93 的 shell 数组(包括bash
),其中${@:0:1}
是$0
即使 的扩展"$@"
不包括$0
。这种混乱是由于 Korn 选择使其 shell 数组索引从 0 开始,尽管它所基于的 Bourne shell 以及该 shell 使用的大多数其他 shell 和工具都选择让其数组索引从 1 开始。
更多相关信息,请访问Zsh 数组的第一个元素索引为 1 而不是 0 是否有原因?