首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在定义“names=(names=[3]=橙色番茄)”之后,"echo ${#names[@]}“在做什么?

在定义“names=(names=[3]=橙色番茄)”之后,"echo ${#names[@]}“在做什么?
EN

Stack Overflow用户
提问于 2016-11-03 23:09:23
回答 1查看 84关注 0票数 1

有人能给我解释一下我应该如何阅读/理解这个命令吗

在这里,我不确定我是否理解了[3]的含义/作用

代码语言:javascript
复制
names=(apples [3]=orange tomatoe)

这里我们说两个名字,什么是[3][@]

代码语言:javascript
复制
echo ${#names[3]} ${#names[@]}

输出是6 3。我不明白,如果有人有时间向我解释或指出正确的手册页,那就太好了。

EN

回答 1

Stack Overflow用户

发布于 2016-11-03 23:17:09

第一部分演示了数组的一般赋值语法。简单的形式,

代码语言:javascript
复制
$ names=(apples oranges tomatoe)
$ echo "${!names[@]}"   # Show the indices defined for the array
0 1 2

将每个元素分配给从0开始的连续整数索引。如果显式地给出了一个索引,则使用该索引,并从那里连续分配后续的值。Shell数组不必是连续的;您的示例中没有定义${names[1]}${names[2]}

代码语言:javascript
复制
$ names=(apples [3]=orange tomatoe)
$ echo "${!names[@]}"
0 3 4

在第二种情况下,您使用的是参数长度操作符。第一个命令告诉您${names[3]}的长度

代码语言:javascript
复制
$ echo "${#names[3]}"   # orange has 6 characters
6

第二个以@作为索引,告诉您数组的长度,即数组中有多少个值。

代码语言:javascript
复制
$ echo "${#names[@]}"
3
$ printf '%s\n' "${names[@]}"
apples
orange
tomatoe
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40405039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档