set -- $args
установите позиционные аргументы на основе содержимого $args
. Теперь вы увидите разницу в поведении между zsh
и другими POSIX-оболочками.
Поскольку zsh
по умолчанию не выполняет Field Splitting, вы получите одну строку, которая является содержимым $args
. Чтобы получить такое же поведение, как в bash
(а также в других POSIX-оболочках), необходимо явно вызвать разделение:
set -- ${=args}
bash
выполните Field Splitting
на содержимом $args
, получите четыре строки. Вы можете проверить $#
, чтобы узнать количество позиционных аргументов после set -- $args
.
Обратите внимание, что в случае bash
, вы должны добавить set -f
, чтобы отключить globbing.