切片包含空字符串的数组

切片包含空字符串的数组

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

full 的切片等效值是多少"$foo[@]"

如果不存在这样的等价物,如何创建一个bar由 的前 5 个元素组成的数组foo

答案1

虽然zsh在参数扩展时不会执行 split+glob,但它仍然会执行空删除,因此这仍然是您想要在那里引用变量的原因之一,因此:

print -rl -- "$var[@]"

或者

print -rl -- "${(@)var}"

这些@都是为了获得"$@"类似伯恩的行为。

对于元素 1 至 5:

print -rl -- "${(@)var[1,5]}"

-likeksh变体也可以工作:

print -rl -- "${(@)var:0:5}"

相关内容