빈 문자열을 포함하는 배열 슬라이스

빈 문자열을 포함하는 배열 슬라이스

foo다음과 같이 초기화된 배열을 생각해 보세요.

$ foo=( a b '' d e f g )

foo7개의 요소를 포함하며 그 중 하나는 빈 문자열입니다.

fooprint내장된 기능을 사용하여 콘텐츠를 인쇄하는 몇 가지 방법은 다음과 같습니다 .

$ 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}"

관련 정보