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의 쉘 배열(include bash) 과 같은 것에서 혼란이 발생할 수 있습니다 . 이러한 혼란은 기반이 되는 Bourne 쉘과 해당 쉘에서 사용하는 대부분의 다른 쉘 및 도구가 배열 인덱스를 0에서 시작하도록 선택하더라도 Korn이 쉘 배열 인덱스를 0에서 시작하도록 선택한다는 사실에 기인합니다. 1.${@:0:1}$0"$@"$0

자세한 내용은 다음을 방문하세요.Zsh 배열의 첫 번째 요소에 인덱스가 0이 아닌 1인 이유가 있나요?

관련 정보