아카이브
#!/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인 이유가 있나요?