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