為什麼 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 是否有原因?

相關內容