ファイル
#!/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
。
ただし、配列インデックスを 0 から開始するオプションを有効にすると、または が最初の位置パラメータであるksharrays
ことがわかります。$argv[0]
${@[0]}
$1
bash
混乱の原因は、ksh93 のようなシェル ( を含む)の配列にある可能性があります。この場合、 の展開には は含まれませんが、 は に${@:0:1}
なります。この混乱は、Korn がシェル配列のインデックスを 0 から開始することを選択した結果です。ただし、Korn のベースとなっている Bourne シェルや、このシェルで使用される他のほとんどのシェルとツールでは、配列のインデックスが 1 から開始することを選択しています。$0
"$@"
$0