假设我有一个非关联数组,其定义如下
my_array=(foo bar baz)
如何检查数组是否包含给定的字符串?我更喜欢可以在if
块的条件内使用的解决方案(例如if contains $my_array "something"; then ...
)。
假设我有一个非关联数组,其定义如下
my_array=(foo bar baz)
如何检查数组是否包含给定的字符串?我更喜欢可以在if
块的条件内使用的解决方案(例如if contains $my_array "something"; then ...
)。
$array[(I)foo]
如果未找到,则返回最后一次出现的foo
in$array
和 0 的索引。e
标志是它是一个e
精确匹配而不是模式匹配。要检查值
$value
的文字列表中的 is,您可以将该值列表传递给匿名函数并在函数体中查找$value
in$@
:要知道在数组中找到值的次数,您可以使用
${A:*B}
运算符(A
也位于数组中的数组元素B
):或者在数组元素上使用模式匹配:
如果您有一个数组
$my_array
并且想知道它是否包含字符串foo
,则一种可能的测试是数组元素的完整、精确值必须是
foo
; 它不是子字符串检查或类似的东西。如果要查看变量的值是否
$my_string
在数组中,请使用这种
(ie)
语法不是很明显。ZSH 手册的下标标志部分对此进行了解释。这i
部分意味着我们正在使用“反向下标”:而不是像往常一样传递一个下标并获得一个值,${my_array[1]}
而是传递一个值并请求第一个给出该值的下标。这个下标是数字的并且从 1 开始(数组的第一个元素在索引 1 处),这与大多数编程语言使用的约定不同。e
in(ie)
表示我们想要精确匹配,而不需要扩展模式匹配字符,例如*
.如果在数组中未找到该值,
${my_array[(ie)foo]
则将评估为数组末尾之后的第一个索引,因此对于 3 元素数组,它将返回 4。${#my_array}
给出数组最后一个元素的索引,所以如果前者小于或等于后者,则给定值存在于数组中的某处。如果要检查给定值是否不在数组中,请将“小于或等于”更改为“大于”: