为什么 zsh 中 $argv 为空?

为什么 zsh 中 $argv 为空?

归档一个

#!/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 是否有原因?

相关内容