首页 > 解决方案 > 如何使用描述性/可读语句获取 BASH 数组长度?

问题描述

似乎在 BASH 中获取数组长度的标准方法是使用${#myArray[@]},如下所示:

myArray=( 1 3 5 7 9 )
length=${#myArray[@]}

echo "length: $length" # length: 5

不过,这种语法令人作呕的神秘和不可读。count( $myArray )有没有类似于,myArray.length等的内置方法?

标签: arraysbashcountcode-readability

解决方案


你可以很容易地实现 count "${myArray[@]}",如果这会让你感觉更好:

count() { echo "$#"; }
length=$(count "${myArray[@]}")

...或者,作为不需要命令替换(以及随之而来的性能损失)来分配结果的替代方案:

assignCount() {
  local -n assignCount_arr=$2
  printf -v "$1" %s "${#assignCount_arr[@]}"
}
assignCount length myArray

但是,这并不能完全使语法变得简单和干净——如果通过省略引号、f/e 来滥用它,那么其内容可能被解释为 glob 表达式或其内容包含 IFS 中的字符的数组可能会返回不正确的值.

坦率地说,bash 不是一种易于使用的语言,并且试图将其视为一种易于使用的语言会导致许多严重的错误与不了解执行模型和语法的来龙去脉而让人们自满并留下重大错误相比,让“这里有龙”预先可见要明智得多。


推荐阅读