bash - 为什么上面的输出是 2 而不是 6 而另一个是 3?
问题描述
lab=(jeff roger brian)
lab[3]=sean
lab=("${lab[*]}" "${lab[*]}")
echo ${#lab[*]}
echo $({lab[*]} > 杰夫罗杰布赖恩肖恩杰夫罗杰布赖恩肖恩
回声 ${#lab[*]} > 2
io=(io iu yu)
echo ${io[*]} > io iu yu
回声 ${#io[*]} > 3
解决方案
"${lab[*]}"
您正在看到和之间的区别"${lab[@]}"
。
$ lab=(jeff roger brian)
$ lab2=("${lab[*]}" "${lab[@]}")
$ for x in "${lab2[@]}"; do echo "$x"; done
jeff roger brian
jeff
roger
brian
"${lab[*]}"
是一个单词,lab
由空格分隔的所有元素组成。
"${lab[@]}"
是一个单词序列,每个单词对应一个单独的元素lab
。
上面的定义lab2
由四个元素组成:由 的内容创建的单个单词lab
,以及 的三个单独元素中的每一个lab
。
如果你没有引用展开式,如 中echo ${lab[*]}
,区别会有些丢失,因为结果会立即进行分词,因此echo
得到三个单独的参数。没有引号,${lab[*]}
并且${lab[@]}
本质上是相同的。
推荐阅读
- google-cloud-platform - 'projects/$project_id/regions/us-central1 所需的 'compute.regions.get' 权限
- sql-server - 如何在 Order by 子句中使用计算别名?
- cors - 对 Tomcat 服务器进行 API 调用时如何修复“被 CORS 策略阻止”错误
- vue-cli - Vue-cli 运行构建 TypeError 'name' 未定义
- reactjs - 如何在反应中使用钩子路由器获取当前的url路径?
- java - 当 String 值为动态时处理 ArrayIndexBoundsOfException
- react-native - 持久补液后记录用户
- javascript - 出现错误 ValidatorError: Path `id` is required。在 mongo 数据库中
- algorithm - 可以对图形进行着色以使相邻顶点具有不同的颜色并且不相邻的顶点具有相同的颜色吗?
- javascript - 不断递减函数值