Почему $argv стал пустым в zsh?

Почему $argv стал пустым в zsh?

файл а

#!/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представляют собой один и тот же обычный (неразреженный) массив позиционных параметров, и все индексы массива начинаются с 1 в zsh, если только вы не включите эту ksharraysопцию.

Но если вы включите ksharraysопцию, чтобы индексы массива начинались с 0, вы заметите, что $argv[0]or ${@[0]}является первым позиционным параметром: $1.

Ваша путаница может быть вызвана массивами оболочек типа ksh93 (включая bash), где ${@:0:1}есть $0, хотя расширение "$@"не включает $0. Эта путаница является результатом того, что Korn решила начать индексы своих массивов оболочек с 0, хотя оболочка Bourne, на которой она основана, и большинство других оболочек и инструментов, используемых оболочкой, решили начать индексы своих массивов с 1.

Подробнее об этом наЕсть ли причина, по которой первый элемент массива Zsh индексируется 1, а не 0?

Связанный контент