首页 > 解决方案 > 为什么上面的输出是 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

标签: bashterminalechodollar-sign

解决方案


"${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[@]}本质上是相同的。


推荐阅读