【问题标题】:Why is the upper output 2 rather than 6 but the other one is 3?为什么上面的输出是 2 而不是 6 而另一个是 3?
【发布时间】:2021-09-01 11:52:25
【问题描述】:
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

【问题讨论】:

  • 数组中只有两个元素;试试declare -p lab 看看。

标签: bash terminal echo dollar-sign


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 2012-11-19
    • 2014-12-29
    • 2017-07-10
    • 2021-11-03
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    相关资源
    最近更新 更多