#在bash脚本中的数组名称前面是什么意思?

时间:2017-09-14 13:53:16

标签: arrays bash shell

我读了这样一句话:

arrayA=$((${#arrayB[@]}+${#arrayC[@]}));

它做什么?特别是数组名称前面#的含义是什么?

2 个答案:

答案 0 :(得分:5)

${#a[@]}扩展为数组a中的元素数。请参阅Shell Parameter Expansion section of the reference manual

  

谢谢@gniourf_gniourf,但这条线的整体情况如何呢?我尝试在我的终端中使用两个数组运行rhs,它似乎尝试将sum结果作为命令执行?这对我来说没有意义......

  • $((...))arithmetic context
  • ${#arrayB[@]}${#arrayC[@]}分别扩展为arrayBarrayC中的元素数量。
  • 因此$((${#arrayB[@]}+${#arrayC[@]}))扩展为arrayBarrayC中元素数量的总和。请使用echo $((${#arrayB[@]}+${#arrayC[@]}))
  • 进行检查
  • 因此,您的代码段会为变量arrayA分配arrayBarrayC中元素数量的总和。

演示:

$ arrayB=( one two three )
$ arrayC=( alpha beta gamma delta )
$ echo "${#arrayB[@]}"
3
$ echo "${#arrayC[@]}"
4
$ echo "$(( ${#arrayB[@]} + ${#arrayC[@]} ))"
7
$ arrayA=$(( ${#arrayB[@]} + ${#arrayC[@]} ))
$ echo "$arrayA"
7

答案 1 :(得分:1)

该行:

arrayA=$((${#arrayB[@]}+${#arrayC[@]}));

读取:set the value of variable arrayA as the summed length of arrayB and arrayC

$(())是算术扩展语法,其中您有两个数组长度+的总和${#array[@]}