foo
다음과 같이 초기화된 배열을 생각해 보세요.
$ foo=( a b '' d e f g )
foo
7개의 요소를 포함하며 그 중 하나는 빈 문자열입니다.
foo
print
내장된 기능을 사용하여 콘텐츠를 인쇄하는 몇 가지 방법은 다음과 같습니다 .
$ print -rl -- $foo
a
b
d
e
f
g
$ print -rl -- "$foo"
a b d e f g
$ print -rl -- $foo[@]
a
b
d
e
f
g
$ print -rl -- "$foo[@]"
a
b
d
e
f
g
로 표시된 마지막 형식만 "$foo[@]"
7개의 별도 인수로 해석됩니다.
print -rl -- ...
이제 처음 5개 요소 foo
(행당 하나의 요소) 만 표시 하고 싶다고 가정해 보겠습니다 .
이것은 작동하지 않습니다:
$ print -rl -- "$foo[1,5]"
a b d e
이것도 아니고:
$ print -rl -- $foo[1,5]
a
b
d
e
다른 변형을 시도했지만 그 중 어느 것도 원하는 결과를 얻지 못했습니다.
a
b
d
e
전체에 해당하는 슬라이싱은 무엇입니까 "$foo[@]"
?
해당하는 것이 없다면 의 bar
처음 5개 요소로 구성된 배열을 어떻게 만들 수 있습니까 foo
?
답변1
Split+glob은 인수 확장 시 분할+glob을 수행하지 않지만 zsh
여전히 null 삭제를 수행하므로 여전히 거기에서 변수를 참조하려는 이유 중 하나입니다.
print -rl -- "$var[@]"
또는
print -rl -- "${(@)var}"
이것들은 모두 Bourne과 같은 동작을 @
달성하기 위한 것입니다 ."$@"
요소 1~5의 경우:
print -rl -- "${(@)var[1,5]}"
-like ksh
변형도 작동합니다:
print -rl -- "${(@)var:0:5}"