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位置引数の両方が同じ汎用(まれでない)配列であり、このksharraysオプションを有効にしない限り、zshでは、すべての配列インデックスは1から始まります。

ただし、ksharrays配列索引付けが0から始まるオプションを有効にした場合、$argv[0]または${@[0]}この最初の位置引数であることがわかります$1

拡張機能も含まれていないksh93のシェル配列などの混乱がbash発生する可能性があります。この混乱は、基盤となるBourneシェルとそのシェルで使用される他のほとんどのシェルとツールが配列インデックスを0から開始することを選択した場合でも、Kornがシェル配列インデックスを0から開始することを選択するという事実によるものです。 1.${@:0:1}$0"$@"$0

詳しくは以下をご覧ください。Zsh配列の最初の要素にインデックスがゼロではなく1の理由がありますか?

関連情報