アーカイブ
#!/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の理由がありますか?